在一个jsp中检测带有两个元素Id的enter事件

时间:2014-10-27 09:33:40

标签: javascript jquery

为什么警报仅显示最后一个事件?我的目标是让所有进入活动的工作。感谢。

这是我的代码:

$(document).off('keyup').on('keyup','#main',function(e){
    if(e.keyCode == 13) alert("enter on main input");
    });

    $(document).off('keyup').on('keyup','#other1',function(e){
    if(e.keyCode == 13) alert("enter on other input");
    });

请参阅此FIDDLE了解演示

3 个答案:

答案 0 :(得分:2)

您在添加后立即删除了keyup处理程序。实际上,这就是你现在所做的......

$(document).off('keyup');

$(document).on('keyup','#main',function(e){
    if(e.keyCode == 13) alert("enter on main input");
});

$(document).off('keyup');  // this removes the event handler you just created

$(document).on('keyup','#other1',function(e){
    if(e.keyCode == 13) alert("enter on other input");
});

拆分代码,让它更清楚发生了什么,就像这样......

$(document).off('keyup');

$(document).on('keyup','#main',function(e){
    if(e.keyCode == 13) alert("enter on main input");
});

$(document).on('keyup','#other1',function(e){
    if(e.keyCode == 13) alert("enter on other input");
});

或者你可以把这样的事情链接起来......

$(document)
    .off('keyup');
    .on('keyup','#main',function(e){
        if(e.keyCode == 13) alert("enter on main input");
    });
    .on('keyup','#other1',function(e){
        if(e.keyCode == 13) alert("enter on other input");
    });

这样做的好处是只为文档创建一次jQuery对象,而不是上面的3次。

答案 1 :(得分:2)

好吧,你正在使用.off('keyup')来取消之前对keyup事件的绑定,所以只绑定了最后一个事件处理程序。

只需删除.off('keyup')

即可

答案 2 :(得分:1)

如其他答案中所述,当您在keyup事件处理程序上使用off方法时,您将删除该事件的所有先前绑定。 拆分代码似乎是这个特定问题的更好选择,但解决问题的另一种方法是使用命名空间。

$(document).off('keyup.main').on('keyup.main','#main',function(e){
    if(e.keyCode == 13) alert("enter on main input");
});

$(document).off('keyup.other1').on('keyup.other1','#other1',function(e){
    if(e.keyCode == 13) alert("enter on other input");
});