Man*_*tto 9 javascript jquery google-chrome
在Chrome浏览器中,使用此代码段时:
$(document).on('keyup', function(){
alert("Hey");
});
Run Code Online (Sandbox Code Playgroud)
每当我按下enter
url栏时(例如,当我剪切并粘贴页面本身的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开始,这种情况不再发生了.但是,我不知道他们修复了哪个版本.
归档时间: |
|
查看次数: |
15515 次 |
最近记录: |