wie man alle Ereignisse mit jquery aufhebt

73

Ich kann diesen Code verwenden, um Klickereignis zu entfernen.

$('p').unbind('click')

Aber gibt es eine Methode, um alle Ereignisse zu entfernen?

hat eine Methode unbindAllin jquery benannt?

Vielen Dank

zjm1126
quelle
Es lohnt sich, Ihre akzeptierte Antwort von Nick's in totalNotLizards zu ändern, da sie .unbind()veraltet ist.
Clonkex

Antworten:

101

Sie können dazu .unbind()ohne Parameter aufrufen :

$('p').unbind();

Aus den Dokumenten :

Im einfachsten Fall werden ohne Argumente .unbind()alle an die Elemente angehängten Handler entfernt.

Nick Craver
quelle
7
Wenn 'p' einige untergeordnete Elemente enthält, wird diese Aussage die Zuhörer auch von diesen trennen?
Vrishank
84

Ab jQuery 1.7 off()und on()sind die bevorzugten Methoden zum Binden und Aufheben der Bindung von Ereignishandlern.

Verwenden Sie Folgendes, um alle Handler aus einem Element zu entfernen:

$('p').off();

oder für bestimmte Handler:

$('p').off('click hover');

Zum Hinzufügen oder Binden von Ereignishandlern können Sie verwenden

$('p').on('click hover', function(e){
    console.log('click or hover!');
});
totalNotLizards
quelle
31
Wenn Sie jede Bindung von Ihrer Seite entfernen möchten, können Sie anrufen $(document).add('*').off();.
Grippe
$ (document) .add ('ID_OF_THE_ELEMENT'). off (); hat mir geholfen .. danke @flu
Mohit Singh
3
@Moitt Ich bin froh, dass ich helfen konnte. Bitte beachten Sie, dass Sie in Ihrem Fall $('#ELEMENT_ID').off()stattdessen direkt hätten verwenden können.
Grippe
Ja, ich habe vergessen, '#' <- Hash-Zeichen zu erwähnen. MEIN SCHLECHTES grrrrrrrrrrrrrrrrrrr ... danke @flu
Mohit Singh
1
@Moitt Ja, das auch;) Aber ich habe über den $(document).add(...)Teil gesprochen. Sie benötigen das Dokument nicht in Ihrer Knotenliste. Wenn Sie einfach alle Ereignisse für ein bestimmtes Element entfernen möchten, dessen ID Sie kennen, können Sie diese $('#ELEMENT_ID').off()sofort verwenden (nichts davor hinzugefügt).
Grippe
2

@jammypeach hat Recht damit, dass Ein und Aus die akzeptierten Methoden sind. Das Aufheben der Bindung führt manchmal zu seltsamen Verhaltensweisen (z. B. das Entbinden von Ereignissen nicht richtig).

Um alle Elemente im Körper zu lösen, suchen Sie sie alle und schalten Sie für jedes Element den Klick-Handler aus (was war die alte Entbindung):

$("body").find("*").each(function() {
    $(this).off("click");
});

In dieser Frage zum Stapelüberlauf erfahren Sie auch, wie Sie die Ereignisse speichern, die Sie deaktiviert haben .

Blaue Himbeere
quelle
1

So entfernen Sie alle Ereignisbindungen von allen Elementen, einschließlich der Dokumentverwendung:

$(document).off().find("*").off();
Vikas Kandari
quelle