Ich habe eine input type="image"
. Dies verhält sich wie die Zellennotizen in Microsoft Excel. Wenn jemand eine Nummer in das Textfeld eingibt, mit dem dies input-image
gepaart ist, richte ich einen Ereignishandler für das ein input-image
. Wenn der Benutzer dann auf klickt image
, wird ein kleines Popup angezeigt, in dem er den Daten einige Notizen hinzufügen kann.
Mein Problem ist, dass ich den input-image
Ereignishandler des Benutzers deaktivieren muss, wenn ein Benutzer eine Null in das Textfeld eingibt . Ich habe folgendes versucht, aber ohne Erfolg.
$('#myimage').click(function { return false; });
quelle
unbind()
es funktioniert? Ich habe es hinzugefügt und beide Ereignisse werden immer noch ausgelöst.$('#myimage').off('click').on('click',function(){...})
.unbind()
hat mir in einer Situation geholfen, in der ich eine Reihe von Kontrollkästchen umgeschaltet habe, aber ich habe den.click()
Handler wiederholt neu hinzugefügt , wodurch die App hängen blieb.Dies war nicht verfügbar, als diese Frage beantwortet wurde, aber Sie können auch die live () -Methode verwenden, um Ereignisse zu aktivieren / deaktivieren.
Mit diesem Code wird beim Klicken auf #mydisablebutton die deaktivierte Klasse zum Element #myimage hinzugefügt. Dadurch wird festgelegt, dass der Selektor nicht mehr mit dem Element übereinstimmt und das Ereignis erst ausgelöst wird, wenn die Klasse 'disabled' entfernt wurde, wodurch der Selektor .live () wieder gültig wird.
Dies hat weitere Vorteile, da das Styling auch auf dieser Klasse basiert.
quelle
live()
, noch nie darüber nachgedacht, es so zu verwenden ... Abgesehen von der Bequemlichkeit der Codierung, ist es schneller oder bietet es andere Vorteile für die Verwendung von Binden / Entbinden?Wenn Sie nur einmal auf ein Ereignis reagieren möchten , sollte die folgende Syntax sehr hilfreich sein:
Mithilfe von argument.callee können wir sicherstellen, dass der eine bestimmte Handler für anonyme Funktionen entfernt wird, und somit einen einzelnen Zeithandler für ein bestimmtes Ereignis haben. Hoffe das hilft anderen.
quelle
Dies kann mithilfe der Funktion zum Aufheben der Bindung erfolgen.
In jquery können Sie demselben Objekt und Ereignis mehrere Ereignishandler hinzufügen. Dies bedeutet, dass das Hinzufügen eines neuen nicht das alte ersetzt.
Es gibt verschiedene Strategien zum Ändern von Ereignishandlern, z. B. Ereignis-Namespaces. Es gibt einige Seiten dazu in den Online-Dokumenten.
Schauen Sie sich diese Frage an (so habe ich von Unbind erfahren). In den Antworten finden Sie einige nützliche Beschreibungen dieser Strategien.
Lesen von gebundenen Hover-Rückruffunktionen in jquery
quelle
Vielleicht funktioniert die Methode zum Aufheben der Bindung für Sie
quelle
Ich musste das Ereignis mit der Requisite und dem attr auf null setzen. Ich konnte es mit dem einen oder anderen nicht machen. Ich konnte auch .unbind nicht zur Arbeit bringen. Ich arbeite an einem TD-Element.
quelle
$("#elementId").click(function(){//Event execution code goes here});
, dass es überhaupt nicht auf der HTML-Seite ist. Um zu verdeutlichen, dass wir tatsächlich verwenden müssen.unbind()
, oder das bevorzugte.off()
unbind
undoff
es hat das Problem nicht gelöst. Vielen Dank!Wenn das Ereignis auf diese Weise angehängt ist und das Ziel nicht verbunden werden soll:
quelle
Möglicherweise fügen Sie den
onclick
Handler als Inline-Markup hinzu:Wenn ja, funktioniert die Abfrage
.off()
oder.unbind()
nicht. Sie müssen den ursprünglichen Ereignishandler auch in jquery hinzufügen:Dann hat die Abfrage einen Verweis auf den Ereignishandler und kann ihn entfernen:
VoidKing erwähnt dies in einem Kommentar oben etwas schräger.
quelle
Aktualisiert für 2014
Mit der neuesten Version von jQuery können Sie jetzt alle Ereignisse in einem Namespace durch einfaches Ausführen aufheben
$( "#foo" ).off( ".myNamespace" );
quelle
Der beste Weg, um ein Inline-Onclick-Ereignis zu entfernen, ist
$(element).prop('onclick', null);
quelle
Für
remove
ALLEevent-handlers
hat das bei mir funktioniert:Alle Event-Handler zu entfernen bedeutet, die Ebene
HTML structure
ohne alleevent handlers
an daselement
und sein angehängten zu habenchild nodes
. Dazu hatjQuery's clone()
geholfen.Damit haben wir das
clone
anstelle desoriginal
ohneevent-handlers
.Viel Glück...
quelle
Danke für die Auskunft. Sehr hilfreich Ich habe es verwendet, um die Seiteninteraktion im Bearbeitungsmodus eines anderen Benutzers zu sperren. Ich habe es in Verbindung mit ajaxComplete verwendet. Nicht unbedingt das gleiche Verhalten, aber etwas ähnlich.
quelle
Falls
.on()
zuvor die Methode mit einem bestimmten Selektor verwendet wurde, wie im folgenden Beispiel:Beide
unbind()
und.off()
Methoden werden nicht funktionieren.Die .undelegate () -Methode kann jedoch verwendet werden, um den Handler für alle Elemente, die mit dem aktuellen Selektor übereinstimmen, vollständig aus dem Ereignis zu entfernen:
quelle
Wenn Sie
$(document).on()
einem dynamisch erstellten Element einen Listener hinzufügen, müssen Sie möglicherweise Folgendes verwenden, um es zu entfernen:quelle
Dies funktioniert auch gut. Einfach und leicht. Siehe http://jsfiddle.net/uZc8w/570/
quelle
Wenn Sie die
onclick
Via einstellenhtml
, müssen SieremoveAttr ($(this).removeAttr('onclick'))
Wenn Sie es über jquery einstellen (wie nach dem ersten Klick in meinen obigen Beispielen), müssen Sie dies tun
unbind($(this).unbind('click'))
quelle
Ich weiß, dass dies zu spät kommt, aber warum nicht einfaches JS verwenden, um das Ereignis zu entfernen?
oder, wenn Sie eine benannte Funktion als Ereignishandler verwenden:
quelle
Alle beschriebenen Ansätze haben bei mir nicht funktioniert, da ich das Klickereignis mit
on()
zu dem Dokument hinzugefügt habe, in dem das Element zur Laufzeit erstellt wurde:Meine Problemumgehung:
Da ich die ".button" -Klasse nicht aufheben konnte, habe ich der Schaltfläche mit denselben CSS-Stilen einfach eine andere Klasse zugewiesen. Auf diese Weise ignorierte der Live- / On-Event-Handler den Klick endgültig:
Ich hoffe, das hilft.
quelle
Hoffe mein unten stehender Code erklärt alles. HTML:
quelle
})(jQuery);
in das IIFE über, wenn bereits global darauf zugegriffen werden kann?Entfernen Sie das einfach von der Schaltfläche:
quelle