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

Comment résoudre le problème de l'exécution de l'événement de clic de liaison de jquery deux fois

小云云
小云云original
2018-03-17 11:58:342142parcourir

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

Implémentation de jQuery lorsque vous cliquez en arrière Liaison d'événements de clic lorsque en appuyant sur la touche de voiture_jquery

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn