Gibt es in jQuery eine Möglichkeit, einen Klick nur einmal zu binden?

8

Ich habe eine Ajax-App, die bei jeder Interaktion Funktionen ausführt. Ich möchte meine Setup-Funktion jedes Mal ausführen können, damit der gesamte Setup-Code für diese Funktion gekapselt bleibt. Das mehrmalige Binden von Elementen bedeutet jedoch, dass der Handler mehr als einmal ausgeführt wird, was offensichtlich unerwünscht ist. Gibt es in jQuery eine elegante Methode, um ein Element mehr als einmal aufzurufen, ohne dass der Handler mehr als einmal aufgerufen wird?

    
Chris Henry 01.06.2010, 04:07
quelle

4 Antworten

8

Sie können das Ereignis an document mit der one() Funktion anhängen:

%Vor%

Nach der Ausführung wird dieser Event-Handler wieder entfernt, damit er nicht erneut ausgeführt wird. Wenn Sie jedoch die Initialisierung benötigen, um vor das Klickereignis eines anderen Elements auszuführen, müssen wir uns etwas anderes überlegen. Die Verwendung von mousedown anstelle von click könnte dann funktionieren, da das mousedown-Ereignis vor dem click-Ereignis ausgelöst wird.

    
Tom Bartel 01.06.2010, 04:10
quelle
12

Benutzer jQuery one Funktion wie Tom sagte, aber lösen Sie den Handler jedes Mal vor dem erneuten Binden. Es hilft, den Event-Handler einer Variablen zuzuweisen, anstatt eine anonyme Funktion zu verwenden.

%Vor%

Sie können auch .unbind('click') ausführen, um alle Klick-Handler zu entfernen, die an ein Element angehängt sind.

    
Chetan Sastry 01.06.2010 04:44
quelle
2

Sie können auch .off () verwenden, wenn unbind nicht den Trick macht. Stellen Sie sicher, dass der Selektor und das Ereignis für .off exakt mit denen übereinstimmen, die ursprünglich für .on ():

bereitgestellt wurden %Vor%

Das hat mir bei der Lösung des gleichen Ajax-Ladeproblems geholfen.

    
user1453804 14.05.2014 14:33
quelle
1

Die Antwort von Chetan Sastry ist was du willst. Im Grunde rufen Sie einfach ein $ (Element) .unbind (Ereignis); vor jedem Ereignis.

Wenn Sie also eine Funktion wie loadAllButtonClicks () haben, die alle

enthält %Vor%

Methoden für jede Schaltfläche auf Ihrer Seite, und Sie führen, dass jedes Mal, wenn eine Schaltfläche geklickt wird, dies mehr als ein Ereignis für jede Schaltfläche natürlich erzeugt. Um dies zu lösen, fügen Sie einfach

hinzu %Vor%

vor jedem

%Vor%

und es werden alle Ereignisse für dieses Element freigegeben und dann das Ereignis mit einem Klick hinzugefügt.

    
mark.inman 17.04.2013 17:39
quelle

Tags und Links