Lassen Sie etwas bei einem Klick-Ereignis passieren, aber nur einmal! Entbinden Sie den Klick-Handler, nachdem das Element einmal angeklickt wurde.
$('#my-selector').bind('click', function() {
$(this).unbind('click');
alert('Clicked and unbound!');
});
Siehe auch Bens Kommentar unten zur jQuery-Funktion .one(), die im Wesentlichen dasselbe tut.
Hat das nicht denselben Effekt wie
$(‘#my-selector’).one(‘click’, function() {
alert(‘Das kann nur einmal passieren’);
});
?
In der Tat, danke fürs Posten.
Die Bindungsformel ermöglicht es Ihnen, das Klick-Ereignis bei Bedarf später erneut zu binden.
Nein, beide sind unterschiedlich.
Wenn Sie „one“ verwenden, wird der Handler höchstens einmal pro Element und Ereignistyp ausgeführt.
Das bedeutet, wenn der Selektor mehrere Elemente betrifft. Dies erlaubt nur einen Klick pro Element.
Aber wenn Sie ein Ereignis explizit entbinden, wird das Ereignis von allen Elementen entbunden, nachdem es einmal ausgelöst wurde.
Ich muss nach einigen angewendeten Animationseffekten ein Klick-Ereignis erneut binden. Was ich möchte, ist, dass der Benutzer den Button nur einmal anklicken kann, bis die Animationssequenz abgeschlossen ist. Mit anderen Worten: Klicken (nur einmal erlauben, bis das Ereignis beendet ist), entbinden, animieren, erneut binden. Ich hatte damit einige Probleme, irgendwelche Vorschläge?
Anstatt das Ereignis zu binden und zu entbinden, prüfen Sie vielleicht stattdessen, ob das Element animiert wird, bevor Sie tun, was Sie vorhatten.
Sie können prüfen, ob etwas gerade animiert wird, mit :animated als Teil des Selektors.
Super! Danke Leute.
kannte den one()-Trick nicht :-)
Kunst
Hey,
one() ist eine nette Funktion, aber nicht immer eine funktionierende Lösung. Wenn wir eine Funktion haben und darin ein Klick-Ereignis binden, um diese Funktion rekursiv aufzurufen, müssen wir den Callback entbinden, bevor wir die Funktion aufrufen können – andernfalls erhalten wir eine Endlosschleife.
function f()
{
$('foo').click(function(){
$(this).unbind('click');
f();
});
// etwas anderes
}
Das können wir mit der one()-Funktion nicht tun. Aber danke für die Tipps!
Guter Trick, aber seien Sie vorsichtig mit unbind(‘click’), da dies alle Klick-Ereignisse entbindet. Verwenden Sie dafür Namensräume, das ist sicherer. Um sicherzustellen, dass nur das richtige Klick-Ereignis entbunden wird
$('#my-selector').bind('click.myEvent', function() {
$(this).unbind('click.myEvent');
alert('Geklickt und mein Ereignis entbunden!');
});
Ist es möglich, die Entbindung bei Blur zu entfernen?
Wie andere gesagt haben, ist .one() die beste Lösung, aber wenn Sie binden / entbinden müssen, sollten Sie sehr vorsichtig sein, wenn Sie $(‘#selector’).unbind(‘event’) verwenden, da alle Listener für das ‘event’ entbunden werden.
Dies stellt sicher, dass Sie nur den einen Listener entbinden.
var myEventFunc = function (){ //...do something $('#selector').unbind('event',myEventFunc); }; $('#selector').bind('event',myEventFunc);Bitte helfen Sie mir, wenn ich einmal auf den Submit-Button klicke, ruft mein submitHandler() auf
Wenn ich noch einmal auf den Submit-Button klicke, wird er 2 Mal aufgerufen...
Das ist mein Code
Name*
E-Mail-Adresse*
Telefonnummer*
Firma
Bezeichnung
Betreff
Nachricht
Senden
function submitHandler(){