Donc pour le moment, je comprends que pour attacher un écouteur d'événement à un élément ajouté dynamiquement, vous devez redéfinir l'écouteur après l'ajout de l'élément. Existe-t-il un moyen de contourner ce problème pour ne pas avoir à exécuter un bloc de code supplémentaire?
En utilisant .on()
, vous pouvez définir votre fonction une fois, et celle-ci sera exécutée pour tous les éléments ajoutés dynamiquement.
par exemple
$('#staticDiv').on('click', 'yourSelector', function() {
//do something
});
$(document).on('click', 'selector', handler);
Où click
est un nom d'événement et handler
est un gestionnaire d'événements, comme référence à une fonction ou à une fonction anonyme function() {}
PS: si vous connaissez le nœud auquel vous ajoutez des éléments dynamiques, vous pouvez le spécifier à la place de document
.
Vous générez dynamiquement ces éléments afin que tout écouteur appliqué au chargement de page ne soit disponible. J'ai édité votre violon avec la solution correcte. En gros, jQuery conserve l'événement pour une liaison ultérieure en l'attachant à l'élément parent et en le propageant vers le bas à l'élément créé de manière dynamique.
$('#musics').on('change', '#want',function(e) {
$(this).closest('.from-group').val(($('#want').is(':checked')) ? "yes" : "no");
var ans=$(this).val();
console.log(($('#want').is(':checked')));
});
Lorsque vous ajoutez un nouvel élément aux appels du plug-in jquery, vous pouvez procéder comme suit:
$('<div>...</div>').hoverCard(function(){...}).appendTo(...)