[英]How can I run a function after a user has stopped typing in an Input field?
[英]Run function after user has stopped typing
我有一个输入字段,用户可以在其中输入一个长值。 然后将该值用作复杂耗时函数中的输入值。
我的问题是:如何在用户完成打字后大约 1 秒开始执行此功能? (我不想在每次按键后运行它,因为它真的会减慢页面速度)。 因此,如果他的下一次击键在上次击键的 1 秒限制内,那么请再等待一秒钟。
你有什么建议吗?
附加说明:我还需要将一些参数传递给这个函数
这是一个草稿: http : //jsfiddle.net/jomanlk/msmJp/
使用setTimeout
和clearTimeout
var timer = null; $('#text').keyup(function(){ clearTimeout(timer); timer = setTimeout(doStuff, 1000) }); function doStuff() { alert('do stuff'); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type='text' id='text'>
这真的很晚了,我知道,但我真的不喜欢每次需要时实现这一点所需的代码行,所以我将逻辑提取到一个只运行一次的页面启动函数中。
(function(){
var keystoppedTimer = null;
var keystoppedInputs = document.getElementsByTagName('input');
for (var i = 0, l = keystoppedInputs.length; i < l; i++) {
keystoppedInputs[i].addEventListener('keydown', function(event){
clearTimeout(keystoppedTimer);
keystoppedTimer = setTimeout(function() {
event.target.dispatchEvent( new Event('keystopped') );
}, 600);
}, false);
}
}());
添加这个(把它想象成一个 polyfill),允许更简单的使用。 要定位停止输入的用户,您所需要做的就是向您的元素添加一个事件侦听器,以“keystopped”为目标。
inputElement.addEventListener('keystopped', function(event){
console.log('Stopped typing');
}, false);
我选择keystopped
是因为它匹配keydown
、 keyup
等。
使用bindWithDelay jQuery 插件:
element.bindWithDelay(eventType, [ eventData ], handler(eventObject), timeout, throttle)
我已经发布了一个解决方案,它会显示用户正在输入并且用户停止输入
function typingAction(){ $('#typing').text("user is typing...."); clearTimeout(); setTimeout(()=>{ $('#typing').text(' user stopped typing.....'); //**can call your function here** },2000); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Chat | ChatApp</title> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <link rel="stylesheet" href="/css/styles.css"> </head> <body > <p id="typing"></p> <input name="message" type="text" placeholder="Message" autofocus autocomplete="off" oninput="typingAction()" /> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.