J'ai une liste déroulante qui se remplit elle-même en fonction de la valeur d'une autre liste déroulante, en utilisant la qualité ajax de jQuery. Je le fais avec le $ (document) fonction .ready, avec ce qui est le code approprié ...jQuery SelectedItem Population
$(document).ready(function() {
populateFirstDropDownBox();
$("#firstBox").change(function() {
populateSecondDropDownBox($("#firstBox option:selected").val());
});
// Do this on initial page load to populate second box
populateSecondDropDownBox($("#firstBox option:selected").val());
});
Cela fonctionne très bien dans Firefox et IE, mais pas dans Chrome. Chrome ne semble pas remplir immédiatement la première liste déroulante de sorte que $ ("# firstBox option: selected"). Val() finit par ne pas résoudre.
Quelle est la meilleure façon de s'assurer que Chrome a rempli la liste déroulante?
Edit: a ajouté plus
function populateFirstDropDownBox() {
$.post("ajax/getFirstBox", function(json) {
var options = makeOptionList(json);
$("#firstBox").html(options);
$("#firstBox").triggerHandler("change");
})
}
function populateSecondDropDownBox(firstBox) {
$.post("ajax/getSecondBox", {firstBox: firstBox}, function(json) {
var options = makeOptionList(json);
$("#secondBox").html(locationOptions);
$("#secondBox").triggerHandler("change");
})
}
function makeOptionList(json) {
data = eval(json);
var options = "";
for (var optIndex = 0; optIndex < data.length; ++optIndex) {
options += "<option value='" + data[optIndex].value + "'>" + data[optIndex].key + "</option>"
}
return options;
}
Vrai, mais j'ai toujours mon problème initial ("Option #firstBox: selected") ne se remplit pas immédiatement dans Chrome. Fonctionne comme un charme dans IE et Firefox. Toutefois, dans Chrome, puisque cette valeur n'est pas encore définie, populateSecondDropDownBox échoue. Je suppose que je cherche juste un moyen de forcer Chrome à peupler l'élément firstBox. – majorpayne27
Vous effectuez une demande asynchrone pour charger les données. Firefox et IE peuvent le charger assez rapidement pour qu'il semble immédiat, mais ce n'est pas le cas. Lorsque vos utilisateurs essaient de charger la page, ils ont une latence plus longue entre eux et le serveur et rencontrent le même problème dans n'importe quel navigateur. La façon dont vous avez structuré votre code, vous devez faire tout le traitement de la 2ème case dans le gestionnaire de réponse Ajax pour qu'il fonctionne de manière cohérente. – noah