jquery按键事件触发了几次

时间:2012-06-13 12:08:20

标签: jquery keypress

您好我已经设置了自动填充输入文字。 我试图在点击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");
        }

}); 

它不会一直发生,并且在不同的浏览器中会有不同的行为。

6 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:8)

这是按键事件的正确行为。只要键处于关闭状态,按键事件就会一直触发(就像在textarea中按下一些字符键时,字符被多次添加,这与按键有关)。对于一次性操作条件,请根据您的要求使用按键或键入事件。按键和按键都只触发一次。它就像:

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

答案 2 :(得分:4)

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

  

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

改用keydown。

答案 3 :(得分:1)

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

  

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

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

答案 4 :(得分:1)

按键状态的文档:

  

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

因此,您可以通过在绑定之前添加.off()来分离处理程序。我也会用.on()替换.bind()函数,因为现在不推荐使用bind。这样的事情应该有效:

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

答案 5 :(得分:0)

只需解除绑定并将其绑定。

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