jQuery keydown keyup函数每隔一段时间触发一次

时间:2012-03-23 16:55:52

标签: jquery

当用户按下Alt键时,我会使用这个小片段来更改一些html,然后在释放它时将其更改回来。

 $(document).keydown(function(e) {

    if(e.altKey) {

        $('#title').html('foo');

        $(this).keyup(function(e) {

            $('#title').html('bar');

        });

    }

});

这是第一次正常,但第二次没有。第3次确实有效,第4次没有...

为什么关键事件似乎只会在每次按键时触发?

2 个答案:

答案 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;
});

演示:http://jsfiddle.net/HZ5gw/

注意:在jQuery中,return false与执行e.preventDefault()e.stopPropagation和停止回调相同。看起来Chrome需要preventDefault()而firefox需要stopPropagation,因此return false可以完成这两项工作。你也可以打电话给每一个。

答案 1 :(得分:2)

我认为这是Chrome的一个问题。

添加e.preventDefault();似乎可以解决问题。

jsfiddle demo