jquery按键事件触发几次

问题描述 投票:8回答:6

嗨,我已经设置了自动完成输入文本。我试图在单击btn并按Enter键时触发重新打印表格的事件。 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
6个回答
14
投票

将keydown事件与html文本框结合使用不足以防止其多次触发。您可以在keydown事件的jquery演示部分上看到以下行为:http://api.jquery.com/keydown/

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

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

8
投票

这是按键事件的正确行为。只要按下按键,keypress事件就会一直触发(例如,如果您在文本区域中按住某些char键,则多次添加char,这与按键有关)。对于一次处理的情况,请根据需要使用按下或按下事件。向上键和向下键都只触发一次。它像:

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

4
投票

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

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

改用键盘按下。


1
投票

尝试将'keypress'更改为'keydown'。

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

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


1
投票

有关按键状态的文档:

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

因此,您可以通过在绑定之前添加.off()来分离处理程序。我也将.bin()函数替换为.on(),因为绑定已被弃用。这样的事情应该起作用:

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

0
投票

只需解除绑定并绑定它。

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

© www.soinside.com 2019 - 2024. All rights reserved.