Выпадающее меню(неправильно назначает обработчик события)
Вот хочу написать выпадющее меню без jquery, чтоб меню не сразу скрывалось, а через промежуток времени.
Хочу чтоб все выглядело так: 1)Функция search_elem, искала элементы LI, у которых присутствует узел UL, и вызывала функцию assign_event 2)Функция assign_event - эта функция должна вешать обработчик события на элементы и останавливать всплытие(вызовом функции stop_bubbling). 3)Функция stop_bubbling, думаю здесь все понятно. Вот начал писать код, и столкнулся с проблемой. Почему-то функция assign_event, вешает события не только на нужный элемент, но и на всех его потомков, я никак немогу это прекратить, всплытие получается убирать, а это нет. По идеи при наведение в моем коде на элемент имеющий потомка ul, должно появляться сообщение (alert). Но оно появляется на всех. Вот код: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Menu</title> <script type="text/javascript"> [JS]var menu_id = "navbar"; var speed_show = 50; var speed_hide = 1000; function search_elem() { var elem = document.getElementById(menu_id).getElementsByTagName("li"); for(i in elem) { var list = elem[i].childNodes; //alert(elem[i].nodeName); for(a in list) { if(list[a].nodeName == "UL") { //alert(list[a].nodeName); assign_event(elem[i], list[a]); } } } } function assign_event(elem, list) { elem.onmouseover = function() { //alert(list.nodeName); //list.style.display = "block"; alert("yes"); stop_bubbling(); } //elem.onmouseout = start_hide; } function stop_bubbling(event) { event = event || window.event; if (event.stopPropagation) event.stopPropagation(); else event.cancelBubble = true; } onload = search_elem; [/JS] </script> <style type="text/css"> #navbar, #navbar ul { margin: 0px; padding: 0px; list-style-type: none; } #navbar li { float: left; } #navbar a { background: #999999; color: #FFFFFF; display: block; font: 11px Verdana, Arial, Helvetica, sans-serif; text-decoration: none; padding: 5px; cursor: pointer; } #navbar a:hover { color: #E2144A; background: #CCCCCC; } /*styles for sub-navbar*/ #navbar ul { display: block; position: absolute; width: 150px; margin: 0px; padding: 0px; list-style-type: none; } #navbar ul li { float: none; } #navbar ul a { background: #666666; padding: 3px; } #navbar ul ul { margin-top: -19px; margin-left: 150px; } </style> </head> <body> <div> <ul id="navbar"> <li><a hover="#">home</a></li> <li><a hover="#">service</a> <ul> <li><a href="#">php</a></li> <li><a href="#">java script</a> <ul> <li><a href="#">jQuery</a></li> <li><a href="#">asp.net</a> <ul> <li><a hover="#">web-design</a></li> <li><a hover="#">web-codding</a></li> </ul> </li> </ul> </li> <li><a href="#">jsp</a></li> <li><a href="#">xhtml</a></li> </ul></li> <li><a hover="#">buy</a></li> <li><a hover="#">about us</a></li> <li><a hover="#">contacts</a></li> </ul> </div> |
Не уверен, что не работает из-за этого, но вы не передаете объект события в вашу функцию stop_bubbling():
function assign_event(elem, list) { elem.onmouseover = function(e) { //alert(list.nodeName); //list.style.display = "block"; alert("yes"); stop_bubbling(e); } //elem.onmouseout = start_hide; } function stop_bubbling(event) { event = event || window.event; if (event.stopPropagation) event.stopPropagation(); else event.cancelBubble = true; } |
Передал, но не помогло. В чем дело?
|
Ну подскажите
|
Часовой пояс GMT +3, время: 08:18. |