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

标签 javascript jquery ajax

我有一个文本区域,人们可以在其中输入一些文本(自然地),我想这样做以便时不时地发出 AJAX 请求以获取有关文本区域内容的一些建议(例如堆栈溢出的相关问题,但对于文本区域,而不是文本输入)。问题是我不能在每次按键时都执行 AJAX 请求(这是无用的并且非常耗费资源),而且我不确定最有效的方法是什么(每 X 个字?每 X 秒) ?还是别的什么?)。

执行此操作的最佳方法是什么?

提前谢谢你。

最佳答案

您可以将 keypress 事件处理程序与 setTimeout 结合使用,这样您就可以在按键后一段时间后发送 Ajax 请求,如果再次按键则取消并重新启动计时器在定时器结束之前发生。假设您有一个 ID 为“myTextArea”的文本区域和一个名为 doAjaxStuff 的 Ajax 回调函数:

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 );

关于javascript - 如何触发延迟到用户暂停输入的 onkeyup 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1620602/

相关文章:

javascript - 双击子菜单设备

javascript - 将焦点设置在模态框中的输入字段

javascript - 如何在 Meteor 中优化用户上传的图像以及服务器上现有的图像

javascript - jQuery.ajax 未读取成功 : function()

jquery - 无法使用 Bootstrap 获得下拉菜单

Javascript - 索引数组/列表中的每个元素

jQuery : how to add a delay to an ajax request?

javascript - Materialise - 使用 ajax 更改数据时自动完成隐藏

javascript - 在 AJAX 和 Rails 中定义路线

javascript - 带有 onclick 事件的动态表行