我可以暂时覆盖事件监听器吗?

时间:2014-11-10 10:06:06

标签: javascript jquery

我想为整个文档添加一个事件监听器,如果程序在函数内部则需要另一个事件监听器。

例如。

$(document).click(function(){
    foo();
    //etc.
});


function f1(){
   $(document).click(function(){
      bar();
      //etc.
   });

   //etc.
};

跑步时:

 click -> foo(); 
 click -> foo();
  ...
 f1();
 click -> bar();
 click -> bar();

2 个答案:

答案 0 :(得分:3)

假设从click删除所有document事件处理程序是可以的,您可以在附加新事件之前使用.off()

$(document).click(foo);

function f1(){
   $(document).off('click').click(bar);
};

JSFiddle

答案 1 :(得分:1)

有点晚了,但这里有一些符合你想要的代码:JSfiddle

HTML:

<button id="f1" style="display:none;">Button for f1</button>

JS:

function f1() {
    $(document).off('click').on('click', foo);
}

var foo = function () {
    $('button').show().click(f2);
};

function f2(e) {
    e.stopPropagation();
    $(document).off('click', foo).on('click', bar);
}

var bar = function () {
    $('button').hide();
    f1();
};

f1();