2017-05-04 84 views
0

我有这个功能,每秒获取输入值,但只有当用户已停止键入。由于用户类型获取输入值,但每秒只有一次(如在谷歌的搜索栏)

var timeout; 
jQuery('#icName').keypress(function() { 
    if (timeout) { 
     clearTimeout(timeout); 
     timeout = null; 
    } 
    timeout = setTimeout(makeSearch, 500); 
}); 

var makeSearch = function() { 
    console.log("value", document.getElementById('icName').value) 

} 

即使用户仍在键入,如何每秒获取一次值?

+1

将它从事件处理程序中取出,并使用setInterval代替...? – CBroe

回答

3

这不是很难;您只需重构代码,以便在没有计时器的情况下启动计时器,而不是在每次按键时都销毁旧计时器。这是你的相同的代码,修改为做到这一点:

var timeout; 
 
jQuery('#icName').keydown(function() { 
 
    if (!timeout) { 
 
     timeout = setTimeout(function() { 
 
      timeout = null; 
 
      makeSearch(); 
 
     }, 500); 
 
    } 
 
}); 
 

 
var makeSearch = function() { 
 
    console.log("value", document.getElementById('icName').value) 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 

 
<input id="icName" />

这也采用​​,而不是keypress,这将捕获所有按键。

+1

谢谢这正是我所需要的答案,一旦我可以在约5分钟由于SO规则 – commonSenseCode