我已经添加了这样的事件监听器:
$('body').on('mouseenter','.classname',function() { /* code */ });
然后我就这样删除了它:
$('.classname').off('mouseenter');
现在我想再打开它。我试过这个:
$('.classname').on('mouseenter');
......但它没有用。
我该怎么做?
答案 0 :(得分:7)
不是那样,不。当你离开它时,你正在摧毁这个事件。它不会存储在内存中,因为它可以像这样重新激活。但是,有一些简单的方法可以简化mouseenter绑定调用。
或者,只需在mouseenter逻辑中使用一个标志即可。如果标志是真的,继续做其余的事情;否则,什么也不做。您可以通过页面上的任何其他活动轻松设置该标记。
标志方法的简化示例:http://jsfiddle.net/8YXFB/
var ontastic = true;
$(document).on('mouseenter', '.classname', function() {
if (ontastic) {
$('#output').append('<li>Moused!</li>');
}
});
$('#on').click(function() {
ontastic = true;
});
$('#off').click(function() {
ontastic = false;
});
(以及HTML,尽管你可能没有想到它)
<div class="classname">Mouse me!</div>
<button id="on">MouseEnter On</button><br/>
<button id="off">MouseEnter Off</button>
<ul id="output">
<li>Initialized</li>
</ul>
答案 1 :(得分:2)
将事件侦听器存储在变量中,而不是将其声明为匿名函数,然后重用它:
var mouseenterListener = function() { /* code */ };
$('body').on('mouseenter', '.classname', mouseenterListener);
$('.classname').off('mouseenter');
// on again
$('body').on('mouseenter', '.classname', mouseenterListener);
答案 2 :(得分:0)
您可以发布剩余的代码吗?
尝试删除“正文”。这是一个有效的代码:
$('.classname').on('mouseenter', testFunc);
$('.on').click(function(){
$('.classname').on('mouseenter', testFunc);
console.log($('.classname').data('events'));
});
$('.off').click(function(){
$('.classname').off('mouseenter');
console.log($('.classname').data('events'));
});
var testFunc = function() {};
答案 3 :(得分:0)
你可以尝试相反的方法:我不会删除(解除绑定)事件,而是创建一个全局标志,指示事件是否应该执行某些操作:
var mef = true;
$('body').on('mouseenter', '.classname', function() {
if (mef) {
/* code */
}
});
因此,只要您不希望事件发生,您只需使mef = false并返回事件,mef = true。
答案 4 :(得分:0)
你几乎就在那里,像这样重写:
$('body').off('mouseenter').on('mouseenter','.classname',function() { /* code */ });