为什么警报仅显示最后一个事件?我的目标是让所有进入活动的工作。感谢。
这是我的代码:
$(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了解演示
答案 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");
});