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

时间:2014-10-27 19:14:41

标签: javascript jquery

我想在点击元素时删除元素的点击(我为此使用off()),并且想要在没有点击元素时重新附加元素(&# 39; actived&#39)。为了表明没有点击,我使用了名为“禁用”的课程。

但是当我删除时,我无法再添加它。它只是没有再次附加事件!

这就是我想要做的事情:

$('.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();

它不起作用,也不会重复这种行为。

2 个答案:

答案 0 :(得分:0)

在没有任何参数的情况下使用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');
});

答案 1 :(得分:0)

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);