繁体   English   中英

用户停止输入后运行函数

[英]Run function after user has stopped typing

我有一个输入字段,用户可以在其中输入一个长值。 然后将该值用作复杂耗时函数中的输入值。

我的问题是:如何在用户完成打字后大约 1 秒开始执行此功能? (我不想在每次按键后运行它,因为它真的会减慢页面速度)。 因此,如果他的下一次击键在上次击键的 1 秒限制内,那么请再等待一秒钟。

你有什么建议吗?

附加说明:我还需要将一些参数传递给这个函数

这是一个草稿: http : //jsfiddle.net/jomanlk/msmJp/

使用setTimeoutclearTimeout

 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是因为它匹配keydownkeyup等。

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM