jQuery off () löst keine Ereignisse bei der Verwendung von bind

8
%Vor%

Ich sehe immer wieder Klick in der Konsole, so dass der Klick nicht gelöst wird. Aber wenn ich den Aufruf bind () entferne, ist der Klick nicht verbunden. Weiß jemand warum? Ich brauche einen Weg, "das" in meiner Testfunktion zu ändern, deshalb verwende ich bind ()

    
Elfy 02.03.2015, 00:07
quelle

4 Antworten

4

Das Problem ist, dass this._click.bind() bei jedem Aufruf eine neue Funktion erstellt. Um einen bestimmten Event-Handler zu lösen, müssen Sie die ursprüngliche Funktion übergeben, die zum Erstellen des Event-Handlers verwendet wurde und die hier nicht stattfindet, sodass der Handler nicht entfernt wird.

Wenn es in Ihrer App nur ein paar bubble s gibt, können Sie Douglas Crockfords Route gehen und einfach this nicht verwenden. Das wird eine Menge Unklarheit darüber beseitigen, auf was sich this bezieht, und sicherstellen, dass jedes bubble einen Verweis auf seine eigene click -Funktion behält, die verwendet werden kann, um das Ereignis nach Bedarf zu entfernen:

%Vor%

Sehen Sie, wie Sie damit nicht mehr auf Methoden wie .bind() und vorstreichende Methoden zurückgreifen müssen.

    
JLRishe 02.03.2015, 00:35
quelle
5

Eine Option wäre, das Ereignis zu benennen :

%Vor%

Beispiel hier

    
Josh Crozier 02.03.2015 00:09
quelle
4

Verwenden Sie den Proxy von jQuery, um eine eindeutige Referenz Ihrer Funktion zu erhalten.

Auf diese Weise wird beim Aufruf von $ .proxy (test, dies) überprüft, ob diese Funktion bereits referenziert wurde. Wenn ja, wird Ihnen der Proxy diesen Verweis zurückgeben, andernfalls erstellt er einen und gibt ihn Ihnen zurück. So können Sie immer Ihre ursprüngliche Funktion erhalten, anstatt sie immer wieder neu zu erstellen (wie mit bind).

Wenn Sie also off () aufrufen und die Referenz Ihrer Testfunktion übergeben, wird off () Ihre Funktion aus dem Click-Ereignis entfernen.

Und auch, Ihre Testfunktion sollte vor der Verwendung deklariert werden.

%Vor%

Ссылка

    
Jeff Chen 02.03.2015 00:31
quelle
3

Bitte lesen Sie Ссылка

bind erzeugt eine neue Funktion, daher ist $(document).on('click', test.bind(this)); wie $(document).on('click', function(){}); und jedesmal wenn Sie es ausführen, rufen Sie eine neue anonyme Funktion auf, so dass Sie keinen Verweis auf die Bindung haben.

Wenn Sie etwas tun würden wie:

%Vor%

Es sollte gut funktionieren

z. B. Ссылка

Auch - bind wird nicht empfohlen, es ist langsam und wird in einigen Browsern nicht unterstützt.

    
Neta Meta 02.03.2015 00:10
quelle