如果我有一个文本框和按钮:
<input id='text'/> <button id='btn'>Click me</button>
我的按钮将焦点设置到文本框的地方在它的单击事件:
$(document).ready(function(){
$('#btn').click(function(event){
console.log('btn ');
$('#text').focus();
});
$('#text').keyup(function(event){
console.log('key ');
});
});
...如果你使用回车键触发按钮单击,不知何故,接收焦点的文本元素也会收到输入按键。
这里是展示此行为的小提琴:
https://jsfiddle.net/qup6keLd/
使用Tab键将焦点设置到该按钮,然后按Enter键。这两个事件都将被触发。使用空格触发按钮的点击不会执行此操作。为什么会发生这种情况,以及如何防止它(除去focus()调用之外)?
我认为该事件被传播下来的树。您可以消耗事件以防止它传播,但我不记得如何。 – Carcigenicate
@Carcigenicate'e.stopPropgation()' – Polyov
这是一个很好的答案,它处理[Javascript中的事件](http://stackoverflow.com/questions/4616694/what-is-event-bubbling-and-capturing) – Polyov