当输入多个字符时只触发一次 HTML 输入事件

如何解决当输入多个字符时只触发一次 HTML 输入事件

我正在创建一个输入字段,每次用户在该字段中输入数据时,应从中获取一些数据(通过 AJAX)并显示该字段。但是,如果用户键入多个字符,假设他键入“test”以获取包含字符串“test”的所有记录,则不必在每个字符按下后进行 4 次查询,而是在停止键入后进行一次查询。我可以想到几个带有全局变量解决方案,我可以在其中检查是否再次触发了相同的事件,但是有没有一种非常优雅的方法来做到这一点?也许检查键盘缓冲区中是否有东西,只有在它为空时才继续?还是只有在键盘缓冲区为空且所有字符都在输入字段中时才会触发事件?

解决方法

优雅的方式是使用超时时间,每次按键都清除之前的超时时间

var tID;

function keyUp (e) {
  if (tID) clearTimeout(tID);
  tID = setTimeout(function() {
    ... // make web call
  },2000);
}

这将确保仅在按下最后一个键后才调用网络调用(您可能需要调整超时值)

,

我能想到的方法有:

  1. 使用超时,从最后一个 keyup 事件开始。对于打字速度较低的用户,这并不总是最好的,也不是那么精确。
  2. 如果用户已完成输入单词,请使用 space 字符 do regconize。根据 lengthtotal word count 的变化,您可以决定是否要发送 AJAX。

根据您使用的输入类型,您可以选择最适合您的方法。第一个有点rigid。第二种方法要求用户每次完成输入时按 space。两者中的一点点可能是一个甜蜜点。在现代,我不认为每隔 keyup 发送请求会造成巨大的性能影响。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?