我想在点击元素时删除元素的点击(我为此使用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();
它不起作用,也不会重复这种行为。
答案 0 :(得分:0)
在没有任何参数的情况下使用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');
});
答案 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);