当用户按下Alt键时,我会使用这个小片段来更改一些html,然后在释放它时将其更改回来。
$(document).keydown(function(e) {
if(e.altKey) {
$('#title').html('foo');
$(this).keyup(function(e) {
$('#title').html('bar');
});
}
});
这是第一次正常,但第二次没有。第3次确实有效,第4次没有...
为什么关键事件似乎只会在每次按键时触发?
答案 0 :(得分:4)
你在Firefox中使用它吗?如果是这样,当您按 alt 时,Firefox将窃取焦点,阻止文档获取按键,并在下一个 alt 按下时将其返回。此外,您在按 alt 时为文档 每 分配一个键盘处理程序,所以第10次,您正在调用9次键盘。你需要将两者分开:
$(document).keydown(function(e) {
if (e.altKey) {
$('#title').html('foo');
}
return false;
});
$(document).keyup(function(e) {
$('#title').html('bar');
return false;
});
注意:在jQuery中,return false
与执行e.preventDefault()
,e.stopPropagation
和停止回调相同。看起来Chrome需要preventDefault()
而firefox需要stopPropagation
,因此return false
可以完成这两项工作。你也可以打电话给每一个。
答案 1 :(得分:2)