jQuery使用另一个on()事件覆盖on()事件

时间:2013-08-28 16:54:46

标签: javascript jquery

我有2个文件,文件1(head.tpl)包含此默认功能操作

$(document).on("click", "#blackout", function(){
    closeSkyBox();
});

这是我想要运行的默认操作,它可以正常运行。

在我的第二页上,我想用{:1}}覆盖head.tpl中的操作:

$(document).on("click", "#blackout", function(){
    closeSkyBox(function(){
        pev_for_country = '';
    });
});

所以,现在当我测试代码时,每个代码都会运行,所以如果我要发出警报(出于测试原因),我会得到两个警告框。如何才能使它只运行第二页中的那个,并禁用head.tpl中的那个。然后当我不覆盖它在第三页上说head.tpl中的那个运行?

3 个答案:

答案 0 :(得分:5)

看起来你正在寻找jQuery's .off

$(document)
    .off('click', '#blackout')
    .on('click', '#blackout', function () {
        // ...
    });

答案 1 :(得分:1)

您可以使用.off删除所有事件处理程序,但是您应该小心:如果其他库添加了您不想删除的事件处理程序,请订阅此事件?此外,如果您在以后添加其他事件处理程序,则会删除它。

我认为更好的方法是创建一个可以覆盖的函数:

function blackoutClick() {
    closeSkyBox();
}

设置点击处理程序:

$(document).on("click", "#blackout", function(){
    blackoutClick();
});

或者,正如保罗在下面的评论中指出的那样,你甚至不需要在匿名函数中包装该处理程序,你可以只使用清理器:

$(document).on("click", "#blackout", blackoutClick );

然后,在第二页中,您可以修改该功能:

function blackoutClick() {
    closeSkyBox(function(){
    pev_for_country = '';
});

答案 2 :(得分:0)

我相信另一种方法是将事件设置为null ...

$(document).on('click', '#blackout', null);

在您重新设置第二页之前。