Maison > Article > interface Web > Comment résoudre le problème de l'exécution de l'événement de clic de liaison de jquery deux fois
Lorsque vous utilisez .on() dans jquery pour ajouter un événement de clic à un élément nouvellement ajouté sur la page, cliquez sur la source de l'événement et l'événement lié sera exécuté deux fois . L'alerte ici sera exécutée deux fois, et par conséquent la suppression du tableau est également exécutée deux fois. Le code spécifique est le suivant (où .tabDel est un élément nouvellement généré après le chargement de la page, donc ordinaire $('.tabDel). click(function(){}) ne peut pas être utilisé Méthode pour ajouter un événement click) :
$('.right').on('click','.tabDel',function(){//删除所加 tab 节点的函数 alert('tab的索引:'+$(this).parents('.contentLi2').index()); var iNum1 = $(this).parents('.contentLi2').index(); var iNum2 = $(this).parents('.anElement').index(); $scope.module.tab[iNum1].fieldList.splice(iNum2,1); $(this).parents('.anElement').remove(); });
Il existe probablement deux solutions trouvées sur Internet :
1 Avant de lier l'événement click avec on, dissocier l'événement, c'est-à-dire
$('.right').off('click','.tabDel').on('click','.tabDel',function(){//删除所加 tab 节点的函数 // alert('tab的索引:'+$(this).parents('.contentLi2').index()); var iNum1 = $(this).parents('.contentLi2').index(); var iNum2 = $(this).parents('.anElement').index(); $scope.module.tab[iNum1].fieldList.splice(iNum2,1); $(this).parents('.anElement').remove(); });
2. Dissocier après l'exécution de l'événement de clic lié, en utilisant unbind(), c'est-à-dire :
$('.right').on('click','.tabDel',function(){//删除所加 tab 节点的函数 // alert('tab的索引:'+$(this).parents('.contentLi2').index()); var iNum1 = $(this).parents('.contentLi2').index(); var iNum2 = $(this).parents('.anElement').index(); $scope.module.tab[iNum1].fieldList.splice(iNum2,1); $(this).parents('.anElement').remove(); }); $('.right .tabDel').unbind('clock');
Cependant, cela a été fait. ne résout pas le problème. La situation est qu'après avoir écrit ceci, l'alerte ne sera pas exécutée. La raison en est que, comme mentionné précédemment : ".tabDel" est un élément généré ultérieurement sur la page et ne peut pas être directement lié à l'événement. . La syntaxe de unbind() est :
$(selector).unbind(event,function)
J'ai donc commencé à chercher d'autres moyens de résoudre le problème. Plus tard, j'ai découvert que le bouillonnement n'était pas empêché lorsque on était lié à l'événement. au code pour éviter le bouillonnement, l'événement s'est déroulé normalement. Le code est le suivant :
$('.right').on('click','.tabDel',function(){//删除所加 tab 节点的函数 // alert('tab的索引:'+$(this).parents('.contentLi2').index()); var iNum1 = $(this).parents('.contentLi2').index(); var iNum2 = $(this).parents('.anElement').index(); $scope.module.tab[iNum1].fieldList.splice(iNum2,1); $(this).parents('.anElement').remove(); return false; });
Jusqu'à présent, le code peut s'exécuter normalement. Le coupable du problème est le bouillonnement, mais le blogueur a mal regardé. direction dans un premier temps.
Cependant, la méthode pour empêcher les bulles n'est pas seulement return false, mais aussi event.stopPropagation(). Il y a une différence entre ces deux méthodes :
event.stopPropagation() empêchera l'événement. up, mais n'empêche pas l'événement lui-même ;
return false empêche non seulement l'événement de se déclencher, mais bloque également l'événement lui-même.
Pour en savoir plus sur les différences entre ces deux méthodes, veuillez trouver les informations pertinentes.
Recommandations associées :
À propos du partage d'instance d'événement de clic de liaison d'indice li d'indice js
Méthode JavaScript pour lier les événements de clic (onclick) aux compétences boutons_javascript
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!