2013-04-22 43 views
2

我使用的HTML输入标签制作一个简单的搜索栏:防止按键的方法被调用多次

<input type="text" id="search_bar" /> 

然后在jQuery的我实现按键的方法来检测用户点击时输入/回车键:

$('#search_bar').keypress(function(e) { 
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return 
     e.preventDefault(); 
     //do stuff 
    } 
}); 

但是,如果用户决定按住回车键,该方法将被多次调用。我想禁用这种行为,即keypress只在用户点击输入时调用一次,但在按住键时不会再次调用。什么是完成这个最好的方法?

谢谢。

+1

尝试使用的onkeyup方法,而不是http://api.jquery.com/keyup/ – TommyBs 2013-04-22 19:28:51

回答

2

尝试使用​​或keyup。这可能会改变keycode的值。

+1

'onkeyup'为当一个键被检测按键 – nullability 2013-04-22 19:40:00

+1

传统的行为时,keydown事件是多次发射。只有关键事件被激发一次 – 2018-03-03 19:34:22

1

尝试使用KeydownKeyup事件代替。只有在从一个州改变为另一个州的情况下,他们才会被解雇。

1

你可以使用,因为你正在经历什么是keypress行为的定时器(keyup和​​可用于计算的按键,但它可能会是相当棘手的追踪所有edge cases on all browsers)。

$('#search_bar').keypress(function(e) { 
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return 
     e.preventDefault(); 

     if (window.preventDuplicateKeyPresses) 
      return; 

     window.preventDuplicateKeyPresses = true; 
     window.setTimeout(function() { window.preventDuplicateKeyPresses = false; }, 500); 

     //do stuff 
    } 
}); 
4

使用onkeyup()只会检测到密钥已被释放。这应该解决你的问题。

$('#search_bar').keyup(function(e) { 
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return 
     e.preventDefault(); 
     console.log("xx"); 
    } 
}); 

按住回车键 - xx仅记录在发行版上。

小提琴:http://jsfiddle.net/veRkd/