Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery事件处理程序中存储和重用超时?_Javascript_Jquery - Fatal编程技术网

Javascript 如何在jQuery事件处理程序中存储和重用超时?

Javascript 如何在jQuery事件处理程序中存储和重用超时?,javascript,jquery,Javascript,Jquery,我有一个按钮,当点击它会启动一个超时功能,如果在功能执行之前再次点击它,我希望前一个超时被清除,这样它就可以启动一个新的超时 演示代码: <div id='a'>lorem</div> $('#a').click(function(){ //code to clear previous timeout //This is not working: clearTimeout(timeout); var timeout = setTimeout(function

我有一个按钮,当点击它会启动一个超时功能,如果在功能执行之前再次点击它,我希望前一个超时被清除,这样它就可以启动一个新的超时

演示代码:

<div id='a'>lorem</div>

$('#a').click(function(){
  //code to clear previous timeout
  //This is not working: clearTimeout(timeout);
  var timeout = setTimeout(function(){
   //do something
  },5000);
  return timeout;    
})
我能想到的唯一方法是使超时全球化,但全球化是丑陋的


有没有更好的办法?在上面的代码中,超时返回到哪里?我可以在哪个范围内使用它?

这里有两种全局变量的替代方法:

1创建本地作用域的过程:

(function(){
    var timer;
    $('#a').click(function(){
      clearTimeout(timer);
      timer = setTimeout(function(){
          //do something
      },5000);
    })
})();
2附加到元素的jquery数据

$('#a').click(function(){
  clearTimeout($(this).data('timer'));
  $(this).data('timer', setTimeout(function(){
      //do something
  },5000));
})

您可以在此处使用全局变量的两个备选方案:

1创建本地作用域的过程:

(function(){
    var timer;
    $('#a').click(function(){
      clearTimeout(timer);
      timer = setTimeout(function(){
          //do something
      },5000);
    })
})();
2附加到元素的jquery数据

$('#a').click(function(){
  clearTimeout($(this).data('timer'));
  $(this).data('timer', setTimeout(function(){
      //do something
  },5000));
})

使用IIFE或模块模式,即。将JavaScript代码添加到函数中,以使超时在外部和更持久的范围内成为非全局变量。第二个问题的可能重复:请参阅和,了解返回值的含义以及如何以“现代方式”尽可能多地执行,尽管返回false仍然有效,但是超时永远不会是一个错误的值,所以..使用IIFE或模块模式ie。将JavaScript代码添加到函数中,使超时在外部和更持久的范围内成为一个非全局变量。可能的重复对于第二个问题:有关返回值的含义以及如何以“现代方式”执行尽可能多的操作,请参阅和,虽然返回false仍然有效,但超时值永远不会是错误值,因此..方法2不适用于JQ 3.1.0+:未捕获类型错误:无法在编号“1”上创建属性“guid”。方法2不适用于JQ 3.1.0+:未捕获类型错误:无法在编号“1”上创建属性“guid”