jQuery remplir déroulante des options basées sur une autre liste déroulante de l'option à l'aide de Javascript Objet Littéral
Je suis la construction d'une liste de sélection pour les utilisateurs basés sur l'année et de faire (fabricant) de la voiture de leur choix. Au lieu de bâtir tous et sélectionnez options, puis l'affichage et le masquage, je voudrais seulement pour remplir la boîte de sélection et des options avec le javascript littéral d'objet qui est en corrélation avec le fabricant du véhicule. I. E. si ils choisissent ce fabricant, puis remplir la liste déroulante suivante avec ces véhicules et sur le changement, le remplacement de ceux pour correspondre à la nouvelle fabricant qui a été changé.
Voici ce que j'ai à ce jour:
Une boîte de sélection:
<label>Make</label>
<select id="makeSelectionBox" class="stringInfoSpacing">
<option value="-1" selected="selected">Make</option>
</select>
Peuplé de dans un objet littéral:
var modelMakeJsonList = {"modelMakeTable" :
[
{"modelMakeID" : "1","modelMake" : "Honda"},
{"modelMakeID" : "2","modelMake" : "Ford"},
{"modelMakeID" : "3","modelMake" : "Chevy"},
{"modelMakeID" : "4","modelMake" : "Nissan"},
{"modelMakeID" : "5","modelMake" : "Toyota"},
]};
L'aide de ce script:
$(document).ready(function(){
var listItems= "";
for (var i = 0; i < modelMakeJsonList.modelMakeTable.length; i++){
listItems+= "<option value='" + modelMakeJsonList.modelMakeTable[i].modelMakeID + "'>" + modelMakeJsonList.modelMakeTable[i].modelMake + "</option>";
}
$("#makeSelectionBox").html(listItems);
});
Il travaille en tant que de besoin et j'ai plus l'un d'alimenter les autres listes déroulantes. Mais comme mentionné ci-dessus, je voudrais un changement de fonction pour gérer le remplissage d'une zone de sélection au lieu d'avoir à afficher et de masquer chacun.
J'ai essayé cela, mais il ont tout cassé:
$(document).ready(function(){
$("select#makeSelectionBox").on('change',function(){
if($(this).val()=="Honda"){
$("select#modelSelectionBox").html(modelTypeHondaJsonList);
}else if($(this).val()=="Ford"){
$("select#modelSelectionBox").html(modelTypeFordJsonList);
}
});
Si quelqu'un a des idées, s'il vous plaît laissez-moi savoir. Voici une fonctionnelle de violon:
OriginalL'auteur isaac weathers | 2014-02-04
Vous devez vous connecter pour publier un commentaire.
Des problèmes avec votre violon:
$(document).ready()
fonctions, mais vous avez seulement besoin d'un en haut de votre code.modelMakeJsonList
,modelTypeHondaJsonList
etmodelTypeFordJsonList
en haut de votre code, de sorte que le reste du document peut les utiliser.listItems
variable, faire 3 versions spécifiques à chaqueselect
boîte. - commeModelListItems
,HondaListItems
etFordListItems
ou quelque chose.$(this).val()
est d'obtenir le numéro d'ID, pas les noms. Pour obtenir les noms, vous devriez faire quelque chose comme$('#makeSelectionBox option:selected').text()'
. Cela devient le texte de l'option sélectionnée de votremakeSelectionBox
.Si vous faites de cette façon, le jQuery vous souhaitez ajouter peut ressembler à quelque chose comme ceci:
Les variables
HondaListItems
etFordListItems
sont faites comme vous devez le faire plus tôt. C'est en supposant que vous souhaitez inclure ces boîtes de sélection dans la conception finale. Voici un violon: Cliquez ici.Edit:
Cependant, ici, est un refactoring de code qui peut être utile:
Tout d'abord, vous pouvez simplifier votre liste de json types de modèle:
Cela fournit une belle façon d'ajouter toutes les options avec une fonction comme ceci:
Et si vous mettez en œuvre ces deux, votre nouveau jQuery appel peut ressembler à ceci:
Ici est un travail de violon pour cette refactoriser: Cliquez Ici.
Qui a l'air assez propre. Laissez-moi savoir si vous êtes à la recherche de quelque chose ou avez des questions!
Si votre premier choix est "Honda" dans le "faire" sélectionner la zone, il ne charge pas la Honda modèles dans la seconde. Si votre première sélection est une autre option dans le "faire" de la boîte de sélection, puis vous sélectionnez "Honda", il vous permettra de charger les options du modèle de manière appropriée. Un correctif pour cela?
Merci, très beau et propre.
OriginalL'auteur Blundering Philosopher