jquery: en direct () - vit qu'une seule fois?
-
28-09-2019 - |
Question
Je suivais ce fil pour désactiver / activer le clic sur un bouton, La meilleure façon de supprimer un gestionnaire d'événement dans jQuery?
L'idée est que vous pouvez également utiliser la méthode en direct () pour activer / désactiver les événements. Qu'est-ce qui se passera avec ce code est que lorsque vous cliquez sur un élément d'un tag, par exemple, .load-élément, il ajoutera la classe désactivée à cet élément. Cela fera en sorte que le sélecteur ne correspond plus à l'élément et l'événement ne sera pas tiré jusqu'à ce que la classe « handicapé » est retiré du sélecteur faisant .live () valide à nouveau.
Voici ce que je suis sorti avec et il ne désactive le clic sur le premier bouton,
$('.load-item:not(.disabled)').live('click',function(){
/* add a .current class to the target item */
$(this).parentsUntil('.column-global').addClass('current');
/* add .disabled class to each a tag in the .current element-div */
$('.current a').each(function(index) {
$(this).addClass('disabled');
});
....
});
et j'ai une autre fonction pour supprimer la classe désactivée lorsque vous cliquez sur un autre bouton,
$('.button-return').click(function(){
...
/* remove all the .disabled class if any exists */
$('.current a').each(function(index) {
$(this).removeClass('disabled');
});
...
/* remove all the .current class if any exists */
$('.item-global').removeClass('current');
return false;
});
J'ai vérifié qu'il ne supprime la classe désactivée, mais le premier bouton est toujours pas à l'état d'origine cliquable.
ai-je manqué quelque chose - ou le live () effectivement vit qu'une seule fois seulement? les meilleures solutions si en direct () n'est pas celui que je doit travailler sur ??
merci.
La solution
Votre bouton retour doit être un événement en direct et
$('.button-return:not(disabled)').live("click",function(){...});
En outre lors de l'utilisation addClass () et removeClass () vous n'avez pas besoin d'utiliser chacun sur le sélecteur. appeler tout simplement.
$('.current a').each(function(index) {
$(this).removeClass('disabled');
});
est le même que celui
$('.current a').removeClass('disabled');
Edité
Remarque lorsque vous ajoutez l'événement en direct sur le bouton de retour, vous devez vérifier qu'il est pas désactivé.
Il fonctionne parfaitement ici est un simple démo http://www.jsfiddle.net/Qax3n/
Autres conseils
Il doit avoir quelque chose à voir avec votre mise en page HTML ou Javascript autre. Les travaux suivants: http://jsfiddle.net/EEJEh/