2014-10-27 56 views
0

为什么警报仅显示最后一个事件?我的目标是让所有参与活动的作品。谢谢。检测两个元素ID在一个jsp中的输入事件

这是mycode的:

$(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用于演示

回答

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倍以上的优势。

2

那么,您使用的是.off('keyup'),它取消了以前的keyup事件绑定,所以只绑定了最后一个事件处理程序。

只需删除该.off('keyup')

1

正如在其他的答案说,当你使用过的方法上要删除所有该事件以前绑定的keyup事件处理程序。 拆分代码似乎是这个特定问题的更好选择,但另一种解决问题的方法是使用名称空间。

$(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"); 
}); 
相关问题