您好我已经设置了自动填充输入文字。 我试图在点击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");
}
});
它不会一直发生,并且在不同的浏览器中会有不同的行为。
答案 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事件,但会为每个插入的字符触发单独的按键事件。
答案 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) {
....
}