小编典典

如何触发延迟到用户暂停键入的onkeyup事件?

ajax

我有一个textarea,人们可以自然地输入一些文本,因此我想这样做,以便不时提出AJAX请求,以获取有关textarea的内容的一些建议(例如堆栈溢出的Related
Questions,但是对于textarea,而不是文本输入)。问题是我不能在每次按键时都发出AJAX请求(这是无用的,而且非常消耗资源),而且我不确定这样做的最有效方法是什么(每X字?每X秒一次)
? 或者是其他东西?)。

这样做的最佳方法是什么?

先感谢您。


阅读 372

收藏
2020-07-26

共1个答案

小编典典

您可以将keypress事件处理程序与结合使用,setTimeout以便在按键后发送Ajax请求一段指定的时间,如果在计时器完成之前发生另一次按键,则取消并重新启动计时器。假设您有一个id为“
myTextArea”的textarea和一个名为的Ajax回调函数doAjaxStuff

function addTextAreaCallback(textArea, callback, delay) {
    var timer = null;
    textArea.onkeypress = function() {
        if (timer) {
            window.clearTimeout(timer);
        }
        timer = window.setTimeout( function() {
            timer = null;
            callback();
        }, delay );
    };
    textArea = null;
}

addTextAreaCallback( document.getElementById("myTextArea"), doAjaxStuff, 1000 );
2020-07-26