2012-06-13 53 views
8

嗨,我已经设置了自动完成输入文本。 我试图点击一个btn和一个输入按键来重新打印表格。干训局点击工作正常, 但输入按键好像它回采(即表中的闪烁)之前触发了几次jquery按键事件发射几次

$('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"); 
     } 

}); 

它不发生的时间和不同的充浏览器differntly作用..

回答

12

在一个HTML文本框组合的keydown事件将不足以防止其被解雇多次。你可以看到在keydown事件的jQuery的演示部分动作此行为:http://api.jquery.com/keydown/

一个可行的办法是使用事件处理程序“一”(见http://api.jquery.com/one/)。确保被处理的事件只有一次:

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

谢谢,不错的一个(明白吗?:-)) – devmonster

+1

我看到你在那里做了什么 – Dishcandanty

+0

Ahhhh ... Aces!这一直在让我疯狂! – JustBaron

4

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

的按键事件被发送到一个元件,当浏览器寄存器键盘输入。这与Keyydown事件类似,但关键重复情况下的 除外。如果用户按下并按住一个键,则会触发一次按键事件,但对于每个插入的字符触发单独按键事件为 。此外,修饰键 (如Shift)会触发keydown事件,但不会触发按键事件。

改为使用keydown。

7

这是按键事件的正确行为。只要按键关闭,按键事件就会持续触发(就像在textarea中按住某个字符键时,字符被多次添加,这与按键相关)。对于处理一次的情况,根据您的要求使用键盘或键盘事件。这两个键和键都只被触发一次。它如下所示:

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

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

当浏览器注册键盘输入时,按键事件被发送到一个元素。这与keydown事件类似,除了关键重复的情况。如果用户按下并保持一个键,则触发一次keydown事件,但是对于每个插入的字符触发单独的按键事件。

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

1

的文档按键状态:

由于.keypress()方法只。对(“按键”,处理程序)的简写,可以使用.off(“keypress”)进行分离。

因此,你可以通过你的绑定之前加入.off()分离处理程序。我还将使用.on()替换.bind()函数,因为现在已不赞成使用bind。像这样的东西应该工作:

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