Heim  >  Artikel  >  Web-Frontend  >  So lösen Sie das Problem, dass Jquerys bei der Bindung eines Klickereignisses zweimal ausgeführt werden

So lösen Sie das Problem, dass Jquerys bei der Bindung eines Klickereignisses zweimal ausgeführt werden

小云云
小云云Original
2018-03-17 11:58:342182Durchsuche

Wenn Sie .on() in jquery verwenden, um einem neu hinzugefügten Element auf der Seite ein Klickereignis hinzuzufügen, klicken Sie auf die Ereignisquelle und das gebundene Ereignis wird zweimal ausgeführt . Die Warnung hier wird zweimal ausgeführt, und dementsprechend wird auch das Löschen des Arrays wie folgt ausgeführt (wobei .tabDel ein neu generiertes Element ist, nachdem die Seite geladen wurde, also gewöhnliches $('.tabDel). click(function(){}) kann nicht verwendet werden Methode zum Hinzufügen eines Klickereignisses):

$('.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();
        });

Es gibt wahrscheinlich zwei Lösungen im Internet:
1 Bevor Sie das Klickereignis mit on binden, Lösen Sie die Bindung des Ereignisses, d Ich bin auf die Situation gestoßen, dass die Warnung nach dem Schreiben nicht ausgeführt wird. Der Grund dafür ist, dass „.tabDel“ ein später generiertes Element auf der Seite ist und nicht direkt an das Ereignis gebunden werden kann . Die Syntax von unbind() lautet:

$('.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();
        });

Also habe ich nach anderen Möglichkeiten gesucht, das Problem zu lösen, nachdem on an das Ereignis gebunden war Um das Sprudeln zu verhindern, lief das Ereignis wie folgt:

$('.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');

Bisher kann der Code normal laufen. Der Übeltäter des Problems ist das Sprudeln, aber der Blogger hat falsch geschaut zunächst die Richtung.

Die Methode zur Verhinderung von Blasenbildung ist jedoch nicht nur „return false“, sondern auch „event.stopPropagation()“. Es gibt einen Unterschied zwischen diesen beiden Methoden:
$(selector).unbind(event,function)
event.stopPropagation() verhindert das Ereignis up, verhindert aber nicht das Ereignis selbst;

return false verhindert nicht nur, dass das Ereignis sprudelt, sondern blockiert auch das Ereignis selbst.

Um mehr über die Unterschiede zwischen diesen beiden Methoden zu erfahren, finden Sie hier relevante Informationen.
 $('.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;
        });

Verwandte Empfehlungen:


Über die js-Index-Subskript-Li-Sammlung, die die gemeinsame Nutzung von Klickereignissen instanziert

jQuery-Implementierung, wenn zurückgeklickt wird. Bindung von Klickereignissen, wenn Drücken der Autotaste_jquery

JavaScript-Methode zum Binden von Klickereignissen (Onclick) an Buttons_Javascript-Fähigkeiten

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass Jquerys bei der Bindung eines Klickereignisses zweimal ausgeführt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn