簡體   English   中英

重新附加已刪除的事件處理程序不起作用

[英]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();

它不起作用,並且不會重復該行為。

不帶任何參數使用onoff無效。 理想情況下,您應該將事件的名稱及其處理程序傳遞給這些方法。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM