Gemäß den Dokumenten für one
:
Wenn das erste Argument mehrere durch Leerzeichen getrennte Ereignistypen enthält, wird der Ereignishandler einmal für jeden Ereignistyp aufgerufen.
Gibt es eine Möglichkeit, eine einzelne Funktion einmal auszulösen, wenn ein Ereignis ausgelöst wird?
Beispiel:
%Vor%Ich möchte die Funktion nur einmal aufrufen, unabhängig davon, welches Ereignis ausgelöst wurde.
Derzeit wird die Funktion für jeden Ereignistyp einmal ausgelöst.
Hinweis : Ich suche hier nicht nach dem
focus
-Ereignis ... dies ist nur ein Beispiel.
Anstatt .one
zu verwenden, verwenden Sie .on
und entfernen Sie die Bindung manuell mit .off
.
Geige: Ссылка
Dies kann etwas eleganter mit Namespaces gemacht werden:
%Vor%Dadurch können wir einen einzelnen Bezeichner (foo) verwenden, um eine beliebige Anzahl von Bindungen zu entfernen, und wir werden keine anderen mouseup- oder keyup-Bindungen beeinflussen, die das Element haben könnte.
Geige: Ссылка
Tolle Antworten! Um sie in eine Funktion einzubinden, folgt hier eine jQuery-Erweiterung, die auf den aktuellen Antworten basiert:
%Vor%Dann ruf so an:
%Vor%Bonus : Dies hat den zusätzlichen Vorteil, dass nur die Handler für diese spezielle Funktion getrennt werden, indem Original-Handler für die Off-Funktion . Andernfalls benötigen Sie benutzerdefinierte Namespaces.
Zusätzlich Wenn Sie möchten, dass ein Handler nur einmal auslöst, sobald eines der Elemente eines der Ereignisse auslöst und sich dann sofort löst, entfernen Sie einfach each
aus der Erweiterung like das:
Um einmal zu feuern und weiterzuschießen, kann das folgende Snippet verwendet werden:
%Vor% Dies funktioniert, indem die Ereignisse vorübergehend mit der Funktion internalCallback
deaktiviert und asynchron ( setTimeout
) wieder aktiviert wird.
Die meisten anderen Vorschläge in diesem Thread deaktivieren alle zukünftigen Ereignisse auf dem Ziel. Während OP mit früheren Antworten zufrieden scheint, erwähnt seine Frage nicht die permanente Deaktivierung von Ereignissen.
Tags und Links javascript jquery events