我创建了一个具有以下结构的 jquery 插件:
(function($){
var timer_handle, i = 5 ;
$.my_plugin = function(){
return{
// provide $.my_plugin.reset() public method to reset
reset : function(){ clearTimeout(timer_handle); }
}
}();
$.fn.my_plugin = function(){
// init codes ...
function tick(){
i -= 1;
console.log(i+'sec elapsed');
if(i == 0){
console.log('time over');
$.my_plugin.reset();
}
timer_handle = setTimeout(tick, 1000);
}
tick();
}
})(jQuery);
$('body').my_plugin();
当我在控制台看到时,经过 0 秒后,计数器仍在负数运行,即 setTimeout 尚未清除。正如我检查的那样,公共方法 $.my_plugin.reset(); 从外部调用清除计时器,但在滴答关闭内部调用的 $.my_plugin.reset() 不会清除计时器。
这种情况的解决方案可能是什么??????