jquery按键事件触发几次

jquery按键事件触发几次,jquery,keypress,Jquery,Keypress,嗨,我已经设置了自动完成输入文本。 我试图触发点击btn并按enter键重新打印表格的事件。btn点击工作正常,并且 但按enter键似乎会在停止前触发几次(意味着桌子会闪烁) $('body').bind('keypress',函数(e){ 如果(e.keyCode==13){ var str=$('#Filter').val(); $('#Table').fadeOut(“slow”).load('printShorts.server.php?Sortby=&dir=&filter='+en

嗨,我已经设置了自动完成输入文本。 我试图触发点击btn并按enter键重新打印表格的事件。btn点击工作正常,并且 但按enter键似乎会在停止前触发几次(意味着桌子会闪烁)

$('body').bind('keypress',函数(e){
如果(e.keyCode==13){
var str=$('#Filter').val();
$('#Table').fadeOut(“slow”).load('printShorts.server.php?Sortby=&dir=&filter='+encodeURIComponent(str)+'&usergroup=&no cache='+(new Date()).getTime()).fadeIn(“slow”);
}
}); 
它不会一直发生,并且在不同的浏览器中表现不同。

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


改用keydown。

这是按键事件的正确行为。只要按键按下,keypress事件就会持续触发(例如,如果在文本区域中按住某个字符键,则会多次添加该字符,这与keypress有关)。对于“一次处理”情况,根据您的要求使用“向下键”或“向上键”事件。向上键和向下键只触发一次。它是这样的:

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

尝试将“按键”更改为“向下键”

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


中,与html文本框结合使用的按键向下事件将不足以防止它被多次触发。您可以在keydown事件的jquery演示部分看到此行为:

一种可能的解决方案是使用eventhandler“One”(请参阅)。确保事件只处理一次:

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

按键的文档说明:

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

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

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

只要解开绑好就行了

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

我知道你在那里做了什么啊哈…A!这让我发疯了+1.这是正确的方法,因为上面的答案只允许按一次键。此解决方案将允许多次按下,但仅当按键被物理按下多次时。
$('body').unbind().bind('keypress', function(e) {
....
}