当父函数被触发时,不退出第一个按键事件

时间:2015-12-26 03:56:22

标签: javascript jquery events

问题

我在.keypress()事件中发生了.click()事件。用户第一次点击该元素时,一切正常,但后续点击会再次触发.keypress()事件而不会关闭"第一个。我已经尝试添加event.cancelBubble = true;和一个空的return语句来打破这个函数,但它没有工作,因为可预见的是,执行中的其余代码都没有被执行但事件仍处于活动状态,按键仍然可以触发它。有没有办法在点击foo时关闭.keypress()事件?

代码

$(foo).click(function(){
    //Do stuff
    $(foo).keypress(function(event) {
        //Do stuff
    });
});

2 个答案:

答案 0 :(得分:4)

你的意思是keypress不止一次打电话吗? 在您的代码中,每次单击foo时,都会在keypress事件中添加一个新的匿名函数。

在绑定新处理程序

之前取消绑定前一个keypress事件处理程序
$(foo).click(function(){    
    //Do stuff    
    $(foo).off('keypress').on('keypress', function(event) {    
        //Do stuff    
    });    
});    

答案 1 :(得分:0)

我不完全确定您要问的是什么,但我认为您想在第一次点击后关闭按键。这应该切换它,虽然你可能想让pressed var global;也许

$(foo).click(function(){
    //Do stuff
    var pressed = false;
    $(foo).keypress(function(event) {
        if(!pressed){
            //Do stuff
            pressed = true;
        } else {
            event.off();
            pressed = false;
        }
    });
});

这里的关键是event.off(),它将删除监听器。