次のJSコードがあります
$('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 をクリックしたときに、一致した結果を表示して画面に表示することです。これで、ユーザーはこれらのオプションのいずれかを選択するか、外側をクリックすることができます。外にある場合、一致した結果は閉じる必要があります。オプションの 1 つを選択すると、途中のコード全体が実行されます。
問題は、一致した結果が別の div の上にオーバーレイされ、それをクリックすると別のことが起こることです。一致した結果をクリックすると、コードは外側をクリックしたものとして登録されます (そのため、一致した選択が消え、クリックしたくない他の div をクリックしたかのようになります。
したがって、私の解決策は、外側のクリックが実行される前にタイマーを配置することでした。clearInterval がタイマーをクリアしないことを除いて、すべて正常に動作します!! そのため、何かを 2 回目にロードすると、タイマーがクリアされていないかのようになります。
どうして?!