не работает li.onmouseout = hide (ul)
Всем фенкс кто откликнулся!
Пишу свой первый скрипт на javasript. Скрипт должен при onmouseover присвоить новый стиль (.show) атрибуту тега UL -> (вроде работает). Затем обратный момент (.hide) - не получается. console.log() - выводит className нужного тега UL. doHide -не выполняется и не могу понять по каким признакам! вот конструкция навигации
<div id="content" class="content">
<ul id="menu" class="menu">
<li><a href="#">item 1  </a></li>
<li><a href="#">item 2  </a></li>
<li><a href="#">item 3</a>
<ul id="submenu" class="submenu">
<li><a href="#">item 3 sub 1</a></li>
<li><a href="#">item 3 sub 2</a></li>
</ul>
</li>
</ul>
</div>
вот стайлы
ul li {list-style: none;}
ul.menu {padding: 0; margin:0; display: block; height: 68px;}
ul.menu > li {float: left; background: url("li.jpg") no-repeat top right; height: 68px;}
ul.menu > li a{display:block; padding-left: 3px; text-decoration: none; height: 68px;}
ul.menu > li a:hover {display: block; background: url("a-hover.gif") repeat-x bottom left; height: 68px;}
ul.menu > li > ul.submenu {display: none;}
.show{display: block;}
.hide{display: none;}
вот самскрипт
function Init(obj) { // смотрит если у А есть дети и среди них ul - то это меню и передает обратно для смены className
var obj = obj.parentNode.childNodes;
var objLength = obj.length;
if (objLength > 1) {
for (var i = 0; i < objLength; i++ ) {
if (obj[i].nodeType == 1 && obj[i].tagName == "UL" ) {
return obj[i];
}
}
}
};
doVisible = function (event) { //определяет что target - A и передает его в Init()
if (event.target.tagName == "A") {
var o = event.target;
var oMenu = Init(o);
if (typeof oMenu != "undefined") {
console.log(oMenu.className);
oMenu.className = 'show';
}
}
};
doHide = function (event) { // а вот эта не работает верне срабатывает переодически не могу понять в чем подвох
if (event.target) {
var ob = event.target;
if (ob.tagName == 'UL' && ob.className == 'show') {
console.log(ob.tagName+' doHide');}
}
};
function doso (event) { // здесь вешаю обработчик события для отрибута - если я все правильно понял
document.addEventListener('mouseover',doVisible,false);
document.addEventListener('mouseout',doHide,true);
};
doso();
в итгое меню открывается но не закрывается - помогите сделать так что бы закрывалось. |
У Вас в doHide не присваивается класс hide.
|
в таком варианте на данный момент скрывает если только убераю указатель мыши с ul. menu li для ul.submenu (show) не выходит.
doHide = function (event) {
if (event.target) {
var ob = event.target;
var re = event.relatedTarget;
var t = re.parentNode.parentNode;
var z = re.parentNode;
if (re.tagName == 'A' && t.className == 'menu') {
var o = document.getElementById('submenu').className = 'hide';
// var t = re.parentNode.parentNode;
//console.log("object event "+ob.tagName+" from tag "+ re.tagName+" parent"+re.parentNode.tagName +" 111"+t.className);
console.log(t.className)
} else if (t.tagName != 'UL') {
var o = document.getElementById('submenu').className = 'hide';
console.log ('good');
//if (t.onBlur) {
// console.log('asdadas');}
}
//console.log(ob.tagName +" "+ob.parentNode.tagName+" "+ re.tagName);
// ob.onMouseout = function () {ob.className = 'hide';}
}
};
|
не могу понять. зачем вы вот так пишите
var o = document.getElementById('submenu').className = 'hide';
если вы просто присваиваете новый класс то незачем это все присваивать переменной.
document.getElementById('submenu').className = 'hide';
на мой взгляд так правильней. |
Да и если вы хотите увидеть, что то на экране или отдебажить то используйте или debugger или alert, как по мне это удобнее.
|
| Часовой пояс GMT +3, время: 05:13. |