有没有办法再次关闭jquery事件呢?

时间:2012-04-02 02:44:13

标签: jquery

我已经添加了这样的事件监听器:

$('body').on('mouseenter','.classname',function() { /* code */ });

然后我就这样删除了它:

$('.classname').off('mouseenter');

现在我想再打开它。我试过这个:

$('.classname').on('mouseenter');

......但它没有用。

我该怎么做?

5 个答案:

答案 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 */ });