javascript - предотвратить onmouseout при наведении курсора мыши на дочерний элемент, где дочерний элемент создается динамически

Я прочитал несколько публикаций на похожие темы, и все они были превосходны, и я многому научился, читая их, однако я все еще не могу заставить свой код работать удовлетворительно.

У меня есть строка меню с несколькими кнопками. Когда я наводил курсор на 3 из них, какой-то javascript динамически создает раскрывающееся меню для каждой из кнопок.

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

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

Но, конечно, события onmouseout срабатывают и очищают это меню.

Я вижу различные подходы к подобным проблемам. Но ни один из них не работает, и я думаю, что это связано с тем, что div и dl созданы там, где их явно не было, когда слушатель был назначен родителю. Таким образом, хотя html, добавленный в dom, помещает раскрывающийся список в область прослушивателя, он по-прежнему предполагает, что произошло событие mouseout.

Я попытался исправить это, добавив слушателей для успешно добавленного динамического содержимого, но я все еще не могу предотвратить срабатывание мыши перед наведением мыши.


person codepuppy    schedule 13.01.2012    source источник


Ответы (1)


Установите таймер и очистите его при наведении курсора на сгенерированные меню.

document.getElementById("menu").onmouseout = function(e){   
    window.to = setTimeout(function(){
        // remove the submenu
    },20)
}

document.getElementById("submenu").onmouseover = function(e){   
    clearInterval(window.to)
}
person Ivan Castellanos    schedule 13.01.2012
comment
Привет Иван, Теперь я уже пробовал применять setTimeout. Я установил его на вывод мыши из кнопки главного меню и установил флаг dropDownFocus, который был протестирован до очистки меню. - person codepuppy; 14.01.2012
comment
должно быть window.to = window.setTimeout(.... Во всяком случае, это сработало для меня. - person tjb1982; 20.03.2012