Man*_*tto 9 javascript jquery google-chrome
在Chrome浏览器中,使用此代码段时:
$(document).on('keyup', function(){
alert("Hey");
});
Run Code Online (Sandbox Code Playgroud)
每当我按下enterurl栏时(例如,当我剪切并粘贴页面本身的url时),事件监听器就会触发.为什么会这样?
编辑:
它让我感到惊讶,因为url bar不在document(可能在window?)并且firefox没有这种行为.当我查找时e.target,Chrome Inspector会显示body.
我认为这可能是由事件冒泡引起的所以我试过这个:
$(document).on('keyup', function(e){
e.stopPropagation();
alert("Hey");
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用.如何防止它被触发?
发生这种情况是因为一旦你在多功能框中输入,焦点就会转向页面.如果你尝试过相同的东西onkeydown,多功能框就不会改变,因为正如你所说,它不是文档的一部分.过滤多功能框的错误事件的一种方法是检查每个keyup都有一对keydown.
<script>
var down = false;
document.addEventListener('keydown', function (){
down = true;
}, false);
document.addEventListener('keyup', function (){
if(down === true){
alert('It was from the page!');
}
else{
alert('Omnibox. Ignore it.');
}
down = false;
}, false);
</script>
Run Code Online (Sandbox Code Playgroud)
制作自己的HTML页面并优先尝试,因为PasteHTML.com将其填充到iframe中.要使其在此处正常工作,请先单击文本以获得iframe焦点.
演示. 请记住使用鼠标将焦点放在多功能框上并键入,而不是键盘快捷键.(这会引发onkeydown事件,造成误报)
更新:从Chrome 35开始,这种情况不再发生了.但是,我不知道他们修复了哪个版本.