重新绑定JQuery事件

时间:2016-08-15 03:20:26

标签: javascript jquery

我有一系列JQuery事件,例如,在

下面
<script>
$("#target").click(function() {
..
});

$("#anothertarget").mouseout(function() {
...
});

$("#someselector").scroll(function() {
...
});

... other JQuery events
</script>

我如何&#34;解开&#34;来自文档的所有这些事件,所以它们都将停止工作并在以后重新绑定它们而不用硬编码它们?

3 个答案:

答案 0 :(得分:1)

你可以做几件事,但无论哪种方式,你都需要为事件设定条件:

您可以创建一个具有条件的事件,该事件将打开或关闭事件。

您可以在条件中设置一个变量为true或false,然后让该变量导致bind或unbind事件。

if(some condition is true){
    $("#target").on("click", function() {
    });
}

//您的场景可能不完全符合此代码,但您需要具有绑定或取消绑定事件的条件

var temp = true;
if(some condition is true){
    $("#target").on("click", function() {
    temp = false
    });
};
if (temp == false){
   $('#target').off("click",function(){
   })
};

// JagsSparrow下面的答案也是一个非常好的方法

答案 1 :(得分:0)

您可以创建bindAll&amp; unBindAll可以在需要时动态调用它们。

function bindAll(){
    $("#target").click(function() {
    ..
    });

    $("#anothertarget").mouseout(function() {
    ...
    });

    $("#someselector").scroll(function() {
    ...
    });
}
function unBindAll(){
    $("#target").off('click');

    $("#anothertarget").off('mouseout');

    $("#someselector").off('scroll');
}

//To bind function call
bindAll();

//To unbind function call
unBindAll();

修改

我们可以存储事件对象,bindunbind如下

var allEvents = {
'#target':{
 event:'click',
 func:function(){
    console.log('click')
 }
},
'#anothertarget':{
    event:'mouseout',
     func:function(){
        console.log('mouseout')
     }
},
'#someselector':{
    event:'scroll',
    func:function(){
        console.log('scroll')
    }
}
}
function bindUnbindAll(isBind){
    for(var selector in allEvents){
        // Here we can carefully filter some events to bind and unbind
        var obj = allEvents[selector];
        if(isBind)
            $(selector).on(obj.event,obj.func.bind(this));
        else
           $(selector).off(obj.event);
    }
}
//to bind function call
bindUnbindAll(true);

//To unbind function call
bindUnbindAll(false);

答案 2 :(得分:0)

要取消绑定Off,可以使用unbind删除该事件,例如:

$('#target').unbind('click'); 

要绑定

$('#target').bind('click', function() { /* Do stuff */ });

您可以将代码放在函数中以绑定/取消绑定对象上的事件。希望这有帮助!