Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2011, 14:30
Новичок на форуме
Отправить личное сообщение для kudenv Посмотреть профиль Найти все сообщения от kudenv
 
Регистрация: 10.03.2011
Сообщений: 6

не работает 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&nbsp </a></li>
       <li><a href="#">item 2&nbsp </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();


в итгое меню открывается но не закрывается - помогите сделать так что бы закрывалось.
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2011, 15:14
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

У Вас в doHide не присваивается класс hide.
Ответить с цитированием
  #3 (permalink)  
Старый 10.03.2011, 17:29
Новичок на форуме
Отправить личное сообщение для kudenv Посмотреть профиль Найти все сообщения от kudenv
 
Регистрация: 10.03.2011
Сообщений: 6

в таком варианте на данный момент скрывает если только убераю указатель мыши с 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';}
	}
};
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2011, 20:16
Профессор
Отправить личное сообщение для розовый слоник Посмотреть профиль Найти все сообщения от розовый слоник
 
Регистрация: 17.10.2009
Сообщений: 258

не могу понять. зачем вы вот так пишите
var o = document.getElementById('submenu').className = 'hide';

если вы просто присваиваете новый класс то незачем это все присваивать переменной.
document.getElementById('submenu').className = 'hide';

на мой взгляд так правильней.
Ответить с цитированием
  #5 (permalink)  
Старый 10.03.2011, 20:21
Профессор
Отправить личное сообщение для розовый слоник Посмотреть профиль Найти все сообщения от розовый слоник
 
Регистрация: 17.10.2009
Сообщений: 258

Да и если вы хотите увидеть, что то на экране или отдебажить то используйте или debugger или alert, как по мне это удобнее.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Не работает jQuery меню с AJAX eugene1986 jQuery 0 08.07.2010 18:49
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32