Dans cet exemple, j'ai une série de 3 listes déroulantes select. La même classe ("group-1") est appliquée à chacune pour indiquer qu'elles sont liées (et permettre plusieurs groupes de sélection sur la même page). L'attribut "data-parent" est appliqué au select pour établir une relation parent/enfant 1:1. L'attribut "data-parent" est appliqué à l'option pour établir une relation de type beaucoup:beaucoup.
Mon objectif est de créer un morceau de code jQuery dynamique afin de ne pas avoir à identifier explicitement le comportement par id ou classe, mais plutôt par la valeur de l'option et la valeur de data-parent.
Mes problèmes :
- La troisième liste déroulante ne se met pas à jour du tout. Je pensais que cela pourrait être dû au fait que certaines d'entre elles ont plus d'une valeur data-parent (séparées par un espace), mais même si je les modifie pour qu'elles aient toutes une seule valeur, elle ne se met toujours pas à jour avec les changements de la deuxième liste déroulante.
- Je ne sais pas comment implémenter les valeurs data-parent "beaucoup" dans les options pour la troisième liste déroulante. Diviser la chaîne, créer un tableau et vérifier si la valeur s'y trouve?
- Comment réinitialiser les deuxième et troisième listes déroulantes à la valeur "par défaut" avec un changement de la liste déroulante parent ? Par exemple, si je choisis "Cookies" du premier, "1 douzaine" et "2 douzaines" apparaissent dans le deuxième. Mais si je sélectionne "1 douzaine" puis change la première boîte par "Gâteaux", "1 douzaine" reste sélectionné même si "Feuille" et "Rond" sont les seules options disponibles dans la liste déroulante. J'aimerais qu'elle se réinitialise à la valeur par défaut ("Desserts...").
Le code est ci-dessous, et voici mon jsfiddle fonctionnel : https://jsfiddle.net/rwh4z623/20/
$(document).ready(function(){
$(".hide").children("option").hide();
$("select").on('change', function(){
var selClass = $(this).attr("class");
var selName = $(this).attr("name");
var selVal = $(this).children("option:selected").val();
$("select."+selClass+"[data-parent='"+selName+"']").each(function(){
$(this).children("option[data-parent='"+selVal+"']").show();
$(this).children("option[data-parent!='"+selVal+"']").hide();
});
});
});
Veuillez sélectionner...
Cookies
Gâteaux
Crème glacée
Desserts...
1 douzaine
2 douzaines
Feuille
Rond
Pinte
Saveurs...
Pépite de chocolat
Avoine
Jaune
Velours rouge
Merci d'avance pour toute aide ! De plus, les suggestions d'améliorations sont appréciées.