2010-07-31 2 views
1

У меня есть всплывающее окно, которое выполняется при наведении курсора с jquery.Остановить двойную мышь над обнаружением

В этой функции у меня есть секундная задержка перед всплывающими дисплеями с помощью SetTimeout

Проблемы заключается в том, если в этой секунде они мыши на несколько раз, то несколько всплывающих окна срабатывают.

$('#div').mouseover(function() {setTimeout("popup()",1000);}); 

Что мне нужно сделать, это отключить обнаружение, а затем включить его во всплывающем окне().

Как я могу это сделать?

ответ

1

Я думаю, что-то вроде этого

(function(){ 
    var popup_timer = 0; 
    $('#div').mouseover(function() { 
     clearTimeout(popup_timer); 
     popup_timer = setTimeout("popup()",1000); 
    }); 
}); 

ПРАВКИ обновленного кода, clearTimeout добавил, завернутые

+0

Это не работает: s – Pablo

+0

обновил код – Ties

+0

Предлагаю обернуть это все в анонимную функцию и использовать 'var' на' popup_timer'. Будьте добры к своему глобальному охвату –

3

Вы можете использовать .hover() с clearTimeout(), как это:

$('#div').hover(function() { 
    $.data(this, 'timer', setTimeout(popup, 1000)); 
}, function() { 
    clearTimeout($.data(this, 'timer')); 
}); 

Это очищает тайм-аут вы устанавливаете, если мышь выйдет, вам нужно будет оставаться на элементе на полную секунду для запуска всплывающего окна. Мы просто используем $.data() на элементе для хранения идентификатора таймера (чтобы мы знали, что нужно очистить). Другое изменение состоит в том, чтобы не передать строку setTimeout(), а скорее ссылку на функцию.

Смежные вопросы