【问题标题】:jquery keypress event firing a few timesjquery按键事件触发几次
【发布时间】:2012-06-13 12:08:20
【问题描述】:

您好,我已经设置了一个自动完成输入文本。 我正在尝试通过单击 btn 和输入按键来触发重新打印表格的事件。 btn 点击工作正常, 但是输入键似乎在停止之前触发了几次(意味着表格闪烁)

$('body').bind('keypress', function(e) {
        if(e.keyCode==13){
             var str = $('#Filter').val();
            $('#Table').fadeOut("slow").load('printShorts.server.php?Sortby=<?echo $sort;?>&dir=<?echo $direction;?>&filter='+encodeURIComponent(str)+'&usergroup=<?=$usergroup?>&no-cache=' + (new Date()).getTime() ).fadeIn("slow");
        }

}); 

它不会一直发生,并且在不同的浏览器中表现不同..

【问题讨论】:

    标签: jquery keypress


    【解决方案1】:

    keydown 事件与 html 文本框的组合不足以防止它被多次触发。您可以在 keydown 事件的 jquery 演示部分看到这种行为:http://api.jquery.com/keydown/

    一种可能的解决方案是使用事件处理程序“one”(请参阅​​http://api.jquery.com/one/)。这确保事件只被处理一次:

    jQuery("#createNewProduct").one("keydown", function (e) {
        //Do Stuff
    });
    

    【讨论】:

    • 我看到你在那里做了什么
    • 啊啊啊...王牌!这让我发疯了!
    【解决方案2】:

    这是按键事件的正确行为。只要按键按下,按键事件就会一直触发(例如,如果您在文本区域中按住某个字符键,则会多次添加字符,这与按键有关)。对于一次性处理条件,根据您的要求使用 key-down 或 key-up 事件。 key-up 和 key-down 都只触发一次。它是这样的:

    {Key-Down} {Key-Press} {Key-Press} ..(as long as key is down).. {Key-Press} {Key-Up}
    

    【讨论】:

      【解决方案3】:

      http://api.jquery.com/keypress/

      当浏览器注册键盘输入时,keypress 事件被发送到一个元素。这类似于 keydown 事件,除了 在键重复的情况下。如果用户按住一个键,一个 keydown 事件被触发一次,但单独的按键事件是 为每个插入的字符触发。此外,修饰键 (如 Shift)触发 keydown 事件,但不触发 keypress 事件。

      改用 keydown。

      【讨论】:

        【解决方案4】:

        按键状态的文档:

        由于 .keypress() 方法只是 .on( "keypress", handler ) 的简写,因此可以使用 .off( "keypress" ) 进行分离。

        因此,您可以通过在绑定之前添加 .off() 来分离处理程序。我也会用 .on() 替换 .bind() 函数,因为 bind 现在已弃用。像这样的东西应该可以工作:

        $('body').off().on('keypress', function(e) {
        

        【讨论】:

        • +1。这是正确的方法,因为最佳答案只允许一键按下。此解决方案将允许多次按下,但前提是该键被多次物理按下。
        【解决方案5】:

        尝试将“keypress”更改为“keydown”。

        当浏览器注册键盘输入时,keypress 事件被发送到一个元素。这类似于 keydown 事件,除了键重复的情况。如果用户按住某个键,则会触发一次 keydown 事件,但会为每个插入的字符触发单独的 keypress 事件。

        来自http://api.jquery.com/keypress/

        【讨论】:

          【解决方案6】:

          只需解绑并绑定即可。

          $('body').unbind().bind('keypress', function(e) {
          ....
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-20
            • 1970-01-01
            • 2016-03-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多