javascript - clearTimeout 似乎没有清除全局定义的计时器 ID

标签 javascript jquery dom-events

我正在尝试创建类似 onFinishTyping 的东西设置 3 秒超时的事件。如果用户在这 3 秒内写了一些东西,我需要销毁该计时器并设置一个新的计时器。问题是,每次单击按钮后,都会触发该事件。

这是我所拥有的:

//setup before functions
const jq = jQuery.noConflict();
var typingTimer; // Timer identifier.
var doneTypingInterval = 3000; // Time in ms.

jq(document).ready(function() {
  // On keyup, start the countdown.
  jq('.table-search-field').keyup(function(event) {
    var typingTimer = setTimeout(function() {
      doneTyping(event.target);
    }, doneTypingInterval);
  });

  // On keydown, clear the countdown.
  jq('.table-search-field').keydown(function() {
    clearTimeout(typingTimer);
  });
});

// User has “finished typing”, do something.
function doneTyping(field) {
  var value = jq(field).val().toLowerCase(); // lower case

  jq.ajax('index.php?option=com_mycomponent&task=player.search&keyword=' + value)
    .done(function(data) {
      console.log('ok');
    }).fail(function() {
      console.log('fail');
    });
};

最佳答案

不要再声明这个变量,只需删除var;您正在使用 var 关键字创建此变量的本地副本。该语句在该特定函数中本地创建变量。

 typingTimer = setTimeout(function(){

关于javascript - clearTimeout 似乎没有清除全局定义的计时器 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923032/

相关文章:

javascript - 防止用户意外离开

javascript - 将多个复选框值存储在一个 localStorage 键中

javascript - typescript 无法导入没有扩展名的文件

javascript - 不循环遍历所有数据

Javascript/HTML/CSS 命运之轮仅按差异旋转?

javascript - 在传单中创建自定义图层控件

javascript - "Object doesn' t support..."IE8 在声明普通变量时停止

javascript - 将javascript对象打印到txt文件

javascript - 在angular js中向对象添加数组属性

jquery - 获取函数和事件的 HTML 文本