[英]Reattach a removed event handler doesn't work
我想在元素被單擊時刪除它的點擊(我為此使用off()
),並且想在元素未被單擊時重新附加點擊(“活動”)。 為了表明未單擊它,我使用了一個名為“ disabled”的類。
但是,刪除后,便無法再添加。 它只是不再附加該事件!
這就是我想要做的:
$('.my-element').on('click', function() {
$('.my-element').off('click');
});
var disabled = setInterval(function() {
if($('.my-element').hasClass('not-clicked')) {
$('.my-element').on();
}
}, 1000);
我正在使用setInterval()來查看是否未單擊元素。 如果不是,則可以再次使用on()。
我什至嘗試在瀏覽器控制台中刪除事件處理程序:
$('.my-element').off();
但是當我嘗試重新附加事件處理程序時...
$('.my-element').on();
它不起作用,並且不會重復該行為。
不帶任何參數使用on
和off
無效。 理想情況下,您應該將事件的名稱及其處理程序傳遞給這些方法。
var handler = function() {
// ...
}
$('.my-element').on('click.namespace', handler);
// ...
$('.my-element').off('click.namespace', handler);
如果只應一次調用處理程序,則也可以考慮使用one
方法。 在這里也使用setIntevarl
是一個壞主意。 添加類后,應立即綁定處理程序。 在這種情況下,我建議使用事件委托技術:
$('#aStaticParent').on('click', '.my-element.not-clicked', function() {
// the handler is called only if the element has `not-clicked` className
$(this).removeClass('not-clicked');
});
jQuery.on()
不會記住已刪除的事件,但是您可以使用以下方法保存當前事件,然后再將其刪除:
var handlers;
$('.my-element').on('click', function() {
handlers = $.extend(true, {}, $._data( this, "events" ));
$('.my-element').off('click');
});
然后附上:
$(".my-element").on("click", handlers.click[0].handler);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.