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”