使用的是jquery 1.11
代码
$(document).on('click','button#test1',function(){
console.log('button clicked');
});
$(document).keydown(function(event){
if(event.keyCode == 13){
console.log('enter');
$('button#test1').click();
}
});
如果我直接点击test1这个button,就只输出“button clicked”一次
如果我按下回车,输出一次“enter”,然而接着会输出两次“button clicked”
这是为什么?怎么解决?
上面说的都真事件重复绑定问题,我从代码上没看出开.
问题就在于 如果button是焦点 你按 enter 本身就要出发一次 button的 click事件,然后你再出发 keydown 事件 所以...
请在点击了按钮之后 让 button 失去焦点 然后再按回车 你就知道咋回事了...
1、首先,
button
是焦点的时候,你按下Enter
键本身就相当于点击了button
,所以触发button
的click
事件(这是浏览器的默认行为)。2、其次,在代码中又同时注册了
Enter keydown
事件,所以当你按下Enter
时又触发了keydown
事件 进而触发button click
事件。回答评论的网友:
input失去焦点不是button失去焦点才能阻止触发两次button click事件
我推测你应该是在一个form
表单中,浏览器默认会触发submit
事件。可以查看浏览器默认行为。