Ich werde versuchen, das Problem mit einem einfachen Code zu erklären.
var fireClick = function() { alert('Wuala!!!') };
$('#clickme').click(fireclick);
$('#clickme').click(fireclick);
Jetzt wird es natürlich zweimal alarmiert, aber ich brauche es nur einmal. Versuchte so viele Möglichkeiten, aber kein Ergebnis.
Vielen Dank.
jquery
event-handling
Taras
quelle
quelle
Antworten:
Ab jQuery 1.7 sollten Sie off verwenden , um Ereignishandler zu entfernen, und on , um sie hinzuzufügen, obwohl Sie die
click
Kurzform weiterhin verwenden können .$('#clickme').off('click').on('click', fireclick); $('#clickme').off().on('click', fireclick);
Ursprüngliche Antwort:
Wenn Sie alle Klick-Handler ersetzen möchten, rufen Sie zuerst unbind ohne Funktionsargument auf. Wenn Sie alle Ereignishandler ersetzen möchten, geben Sie den Ereignistyp nicht an.
$('#clickme').unbind('click').click(fireclick); $('#clickme').unbind().click(fireclick);
quelle
$('#clickme').off('click').on('click', fireclick);
oder einfach$('#clickme').off('click').click(fireclick);
.Verwenden Sie einen Namespace, um sicherzustellen, dass Sie keine anderen Listener entfernen:
$('#clickme').off('click.XXX').on('click.XXX', fireclick);
Solange kein anderer Code verwendet wird
XXX
, können Sie sicher sein, dass Sie kein anderes Verhalten durcheinander gebracht haben, das Ihnen nicht bekannt war.quelle
Sie können die jQuery-Funktion zum Aufheben der Bindung verwenden , um das erste Ereignis zu entfernen:
var fireClick = function() { alert('Wuala!!!') }; $('#clickme').click(fireclick); $('#clickme').unbind('click', fireClick); // fireClick won't fire anymore... $('#clickme').click(fireclick); // ...but now it will
quelle
Ich würde versuchen, die zusätzlichen Anrufe zu eliminieren, aber kurz davor könnten Sie sicherstellen, dass Sie beide jedes Mal anrufen:
$('#clickme').unbind('click', fireclick); $('#clickme').click(fireclick);
quelle
$(document).off('click', '#clickme').on('click', '#clickme', fireclick);
quelle
Sie sollten setInterval verwenden. Das Problem ist, dass nicht zwei Warnungen gleichzeitig angezeigt werden können. Zuerst muss man zuerst schließen oder der zweite kann nicht auf dem Bildschirm erscheinen ...
quelle