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?
Sie können das Ereignis an document
mit der one()
Funktion anhängen:
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.
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.
Sie können auch .unbind('click')
ausführen, um alle Klick-Handler zu entfernen, die an ein Element angehängt sind.
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.
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.
Tags und Links javascript jquery