1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
/*
* trigger="true" permet de dire que c'est l'élément le plus haut qui fait varier toutes les autres listes
* target=[id_cible] permet de spécifier la liste qui doit varier au changement de la sélection
* reference=[id_reference] est l'id de l'élément parent qui déclenche la mise à jour de la liste
*/
//Fonction qui s'occupe de la mise à jour des listes
function updateSelectBox(object){
// Object correspond au input qui déclenche l'action (pays dans notre cas)
// On récupère le select (département) qui doit être mise à jour suite au changement du parent (pays)
var target = $("#"+object.attr('target'));
// On récupère tous les optgroup du select cible spécifié avec target (les optgroup du select département)
var listGroups = target.find("optgroup");
// On récupère le optgroup qui correspond à la valeur courante du select parent (pays)
var validGroup = target.find("optgroup[reference='"+object.find(':selected').val()+"']");
//On modifie la valeur courante du select cible (département)
target.val(validGroup.find("option").val());
//On cache tous les optgroup de département
listGroups.hide();
//On affiche uniquement le optgroup de département qui correspond à la valeur courante de pays
validGroup.show();
//On vérifie si la cible (département) doit déclencher une mise à jour d'une autre liste
// Département peut par exemple déclencher la mise à jour des villes, et les villes déclenches celle des quartiers...
if(target.attr('content-type')=='choices')
target.change();
}
//On associe la fonction updateSelectBox à l'événement onchange des listes qui doivent déclencher des mises à jour d'autres listes
$("select[content-type='choices']").on('change',function(){
updateSelectBox($(this));
});
//On fait la première mise à jour des
$(document).ready(function(){
updateSelectBox($("select[trigger='true']"));
}); |
Partager