2011-12-04 6 views
0

J'ai deux menus déroulants, le second menu déroulant apparaît en fonction de ce qui est sélectionné dans le premier menu déroulant. Le problème est que dans certains navigateurs, si quelque chose est sélectionné dans le premier menu déroulant, alors si je clique sur le second menu déroulant alors une liste déroulante ne se produit pas, mais si je sélectionne quelque chose dans le premier menu déroulant puis cliquez sur le second menu déroulant, puis la liste déroulante apparaît dans le second menu déroulant. Pourquoi cela arrive-t-il?La deuxième liste déroulante n'apparaît pas immédiatement

Dans Internet Explorer, Firefox et Safari, mon deuxième menu déroulant apparaît tout de suite lorsque je clique dessus après avoir sélectionné quelque chose dans le premier menu déroulant pour la première fois. Dans google chrome et l'opéra, je dois sélectionner des options dans le premier menu déroulant deux fois pour pouvoir faire fonctionner le second menu déroulant.

Le code jquery pour le second menu déroulant est ci-dessous:

var OptDrop = new Array(); 

    OptDrop.abc = ["",1,2]; 
    OptDrop.abcd = ["",1,2,3]; 
    OptDrop.abcde = ["",1,2,3,4]; 
    OptDrop.trueorfalse = [1]; 
    OptDrop.yesorno = [1]; 

    $("#optionDropId").change(function(){ 
     var selectedValue = $(this).val(); 
     $("#numberDropId").html(""); 
     $.each(OptDrop[selectedValue], function(x,y){ 
      $("#numberDropId").append($("<option></option>").attr("value", y).html(y)); 
     }); 
}); 

Le code complet est en jsFiddle. here (le code complet pourrait ne pas fonctionner pleinement jsFiddle mais il fonctionne dans les navigateurs sur son propre fichier et le code complet montre l'ordre de mon code

Mise à jour du code.

Ce que j'ai mis dans mon Code;

$("#optionDropId").change(function(){ 
    var selectedValue = $(this).val(); 
    $("#numberDropId").html(""); 
    $.each(OptDrop[selectedValue], function(x,y){ 
     $("#numberDropId").append($("<option></option>").attr("value", y).html(y)); 
    }); 

}); 

$(document).ready(function(){ 
    $("#optionDropId").change(); 
}); 
// this does not allow the second dropdown to work, I tried moving this code around but can't get dropdown to work when including this code 
+0

qui est parce que votre code jquery est exécuté à l'intérieur de la fonction 'getDropDown' .. il faut s'exécute une fois avant de faire sa liaison .. (* et vous lierez bien sûr une instance supplémentaire chaque fois que vous la relancerez .. *) –

+0

Veuillez ne pas modifier les réponses des autres personnes pour ajouter votre code. Au lieu de cela, s'il vous plaît modifier votre question et ajouter le code là. –

+0

Désolé combat ça, j'ai mis la mise à jour dans ma question, je ne mettrai plus une mise à jour dans la réponse de quelqu'un. Désolé donc – BruceyBandit

Répondre

0

l'événement .Modification jquery n'est pas tiré sur pageload car elle repose sur des événements javascript sous-jacents et la sélection de la première option dans une liste pageload n'est pas une sélection javascript, son comportement par défaut

.
$(document).ready(function(){ 
    $("#optionDropId").change(); 
}); 

qui devrait déclencher les .changeevents que vous avez attribué, assurez-vous de l'appeler après votre bloc d'affectation de .Modification

+0

alors dites-vous remplacer ceci: "$ (" # optionDropId "). Change (function() {" à ce que vous avez mentionné? – BruceyBandit

+0

Non, nous gardons les deux bits de code, votre code fonctionne bien sur la mise à jour de la Lorsque vous relâchez l'événement .change, mon petit fragment de code déclenche artificiellement l'événement change, provoquant l'exécution du code que vous avez assigné à cet événement Consultez la documentation de jquery pour connaître la fonction de changement. : [http://api.jquery.com/change/] Vous utilisez la première version de la fonction et j'utilise le troisième –

+0

le lien vers la documentation de jquery ne trouve pas la page. éditera votre réponse dans 1 minute pour montrer ce que j'ai fait avec les deux bits de code alors j'espère que je fais ce que vous m'avez dit de faire – BruceyBandit

Questions connexes