2
我有下面的JS代碼的Javascript clearInterval不清除
$('body').on({
click: function()
{
var el = $(this);
lookUpTask(el);
el.bind('blur', function(){
timeOutTask = setInterval(function(){
if(timeOutTask)
{
clearInterval(timeOutTask);
el.trigger('remove_match');
}
}, 500);
$('body').on({
click: function(event)
{
var match = $(this);
var color = match.attr('color');
// Check color to change brightness
var brightness = hexToLuminance(color);
var text_color = '#000';
if(brightness < 128) {
text_color = '#fff';
}
// Change color according to brightness
el.css('color',text_color);
el.parent().parent().children('.remove').css('color',text_color);
el.parent().parent().children('.resize').css('color',text_color);
// Change the background and task name
el.parent().parent().css('background-color', color);
el.val(match.html());
// Update DB
// Remove the task_match
el.trigger('remove_match');
}
},'.match');
});
el.bind('remove_match', function(){
if(el.val == "") {
el.val('Select Task');
}
el.css('text-align','center');
el.parent().children('.match_results').remove();
clearInterval(timeOutTask);
});
},
keyup: function(event)
{
lookUpTask($(this));
}
},'.task_select');
當用戶點擊.task_select,然後我調出匹配的結果,並在屏幕上顯示我所試圖做的是。現在,用戶可以選擇其中一個選項,或者在外面點擊。如果在外面,則匹配結果應該關閉。如果選擇了其中一個選項,則中間的整個代碼將運行。
問題是匹配的結果疊加在另一個div的頂部,如果它被點擊,則會發生其他情況。當我點擊匹配的結果時,然後代碼註冊爲點擊外部(所以匹配的選中消失,效果就好像我點擊了其他div,我不想點擊。
所以我的解決辦法是放在外面的點擊前一個計時器被執行。這一切工作正常,但clearInterval不clearout定時器!!所以我第二次加載的東西,它是彷彿計時器不會被清除!
爲什麼?
您正在用新的時間間隔覆蓋'timeOutTask'。請參閱[這是我的回答](http://stackoverflow.com/a/17199864/1169519),如何緩存間隔。雖然答案是關於超時,但你也可以將它應用於間隔。 – Teemu
太棒了!這工作像一個魅力!謝謝!如果你把它寫成答覆,那麼我可以將其標記爲解決方案 – user1083320