Проблемы с выпадающим списком setInterval / clearInterval - PullRequest
0 голосов
/ 28 октября 2010

Я хочу создать выпадающее меню, используя jquery, но оно закрывается, даже если это не так.

У меня есть элемент, который подписан на событие mouseenter, мышь входит в элемент, выпадающий список, запускаетсявсе вроде бы нормально.Я иду к списку элементов, который является элементом списка с некоторым содержанием в нем.В первый раз, когда я изменяю два элемента, все работает, как ожидается.Поэтому я оставляю элементы, вызывается событие mouseout, и в течение 1000 мс список больше не виден.Во второй раз, когда я открываю «выпадающий список», кажется, что все в порядке, но если я перехожу список, он исчезает, как и должен, когда я покидаю элементы.В некотором смысле это логично, потому что каждый из двух элементов (кнопка и список) подписан на два события: mouseenter и mouseleave.Mouseenter предоставляет clearInterval, mouseout предоставляет setInterval.Данные хранятся в переменной с именем tTimer, значение которой по умолчанию равно 0. Я действительно не знаю, почему это происходит.Вот фрагмент из моего кода:

        var tTimer = 0;
        var rmItemList = function(){itemList.remove(); clearTimeout(tTimer); }

        $(this).bind("mouseleave",function(){ tTimer = window.setTimeout(rmItemList, 1000); });
        itemList.bind("mouseleave",function(){ tTimer = window.setTimeout(rmItemList, 1000); });
        $(this).bind("mouseenter",function(){ window.clearTimeout(tTimer); itemList.appendTo("body"); });
        itemList.bind("mouseenter",function(){ window.clearTimeout(tTimer); });

1 Ответ

1 голос
/ 28 октября 2010

Мне немного сложно визуализировать, что вы делаете. Однако я вижу, что вы постоянно добавляете и удаляете элемент из DOM. Я считаю, что .remove() удаляет обработчики событий из элемента. Возможно, лучше использовать .show() и .hide().

Это даст дополнительное преимущество в виде значительно улучшенной производительности.

...