当前位置: 首页 > 面试题库 >

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

慕容聪
2023-03-14
问题内容

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

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

先感谢您。


问题答案:

您可以将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 );


 类似资料:
  • 问题内容: 我有一个搜索字段。现在,它会搜索每个键。因此,如果有人键入“ Windows”,它将使用AJAX搜索每个键入的内容:“ W”,“ Wi”,“ Win”,“Wind”,“ Windo”,“ Window”,“ Windows”。 我希望有一个延迟,因此它仅在用户停止键入200毫秒时才搜索。 函数中没有为此的选项,我已经尝试过了,但是没有用。 我怎样才能做到这一点? 问题答案: 我将这个小

  • 假设: 让我们假设数据插入DynamoDB的速率是巨大的。 上下文: 在DynamoDB表上启用流,这将触发lambda。lambda读取流记录,并在弹性搜索中对记录进行索引。 问题陈述: 在将记录插入DynamoDB的时间和通过流式记录触发lambda的时间之间存在延迟。这种延迟或滞后不断增加,并且与插入DynamoDB的数据量成正比。 如何找到滞后的位置?是流没有立即触发lambda吗?还是因

  • 问题内容: 我想展示如何使用进行合并排序。我想做的是在一段时间后使可见。我尝试了很多方法,但是所有这些都同时出现,没有中间延迟。 但是,当我单击按钮时,所有标签都出现在相同的momenet上,尽管我一直保持延迟。 问题答案: 有很多原因导致此方法无法正常工作。首先,这种方式行不通。它在后台等待,直到给定的延迟过去,然后调用注册的s 方法。 其次,如果它确实以这种方式工作,它将阻止事件调度线程,从而

  • 是否有任何方法可以暂停EventBus从guava库发布的事件。 我有一个发布事件的方法(例如,SomethingChangedEvent)。现在,这个方法在循环中被另一个方法调用。问题是,每次调用时都会发布,即使只有最后一次更改才重要。由于事件的处理程序执行一些重计算,因此应用程序的性能会快速下降。 最后一次执行后,我想告诉guava恢复事件处理。 有没有办法告诉番石榴,除了最后一个,不要理会所

  • 问题内容: 有人对如何实现自己的XAResource有很好的教程或建议吗?我需要Spring的MailSender进行事务处理,以便仅在事务提交后才发送邮件,而且似乎没有任何现有的事务包装器。 问题答案: 如您在评论中所述,如果您只需要等待提交,则可以调查用于触发提交时发送电子邮件的情况。

  • 我一直在寻找能在按键之间有一点延迟的方法。我一直在制作这个程序,它使用JIntellitype库读取全局热键,然后启动您指定的任何一个按键序列,例如按numpad1将执行一个B C序列。我的问题是,如果我使用线程。睡眠它只是延迟X个时间,然后按所有指定的键,在任何按键之间没有任何延迟。有人对如何解决这个问题有什么建议吗?提前谢谢! 这就是我用来发送机器人类按键的东西