次の構造の 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();
console を見ると、0 秒が経過した後も、カウンターはまだ負の状態で実行されています。つまり、setTimeout はクリアされていません。私が調べたように、パブリックメソッド $.my_plugin.reset(); 外部から呼び出されてタイマーをクリアしますが、ティッククロージャー内で呼び出された $.my_plugin.reset() はタイマーをクリアしません。
そのような場合の解決策は何ですか?????