Проблема со скриптом

Статус
Закрыто для дальнейших ответов.

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Вот захотел написать скрипт для выпадающего меню. Так чтоб ненадо было у каждого элемента LI прописывать событие onmouseover и onmouseout.
Работает, но неверно. :(
Когда я навожу на первую сылку, должна появиться первое саб меню, но появляется последнее, навожу на 2 ссылку, тоже появляется последнее саб меню и т.д. Непонимаю в чем проблема. Плиз помогите кто знает. :)

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Vertical Drop Down Menus</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<!--<script type="text/javascript" src="scripts/drop_dow.js"></script>-->
<script type="text/javascript">
<!--

startList = function() {
	var id_menu = document.getElementById("navbar");
	
	for(var i = 0; i < id_menu.childNodes.length; i++) {
		var node = id_menu.childNodes[i];
		if(node.nodeName == "LI") {
			if(node.hasChildNodes()) {
				for(var a = 0; a < node.childNodes.length; a++) {
					var node_li = node.childNodes[a];	
					if(node_li.nodeName == "UL") {
						node.onmouseover = function() {
							node_li.style.display = "block";
						}
						node.onmouseout = function() {
							node_li.style.display = "none";
						}
					}
				}
			}
			
		}
	}
}

window.onload = startList;

//-->
</script>
<style type="text/css">
#navbar {
	margin: 0px;
	padding: 0px;
	list-style-type: none;
	width: 150px;
	border-bottom: 1px solid #333333;
}
#navbar li {
	position: relative;
	border: 1px solid #333333;
	border-bottom: 0px;
}
#navbar a { 
	color: #000000;
	display: block;
	font: 12px Verdana, Arial, Helvetica, sans-serif;
	text-decoration: none;
	padding: 5px;
}
#navbar a:hover { 
	color: #E2144A;
	background: #f9f9f9; 
} 
/* styles for sub_navbar */
#navbar ul {
	border-bottom: 1px solid #333333;
	position: absolute;
	top: -1px;
	left: 148px;
	display: none;
	width: 150px;
	margin: 0px;
	padding: 0px;
	list-style-type: none;
}
/* end */

/* Fix IE. Hide from IE Mac \*/
* html ul li { float: left; height: 1%; }
* html ul li a { height: 1%; }
/* End */
</style>
</head>
<body> 
<ul id="navbar"> 
  <li><a href="#">Home</a></li> 
  <li><a href="#">About</a> 
	<ul> 
	  <li><a href="#">History</a></li> 
	  <li><a href="#">Team</a>
		<ul>
		  <li><a href="#">Link-01</a></li>
		  <li><a href="#">Link-02</a></li>
		</ul>
		</li> 
	  <li><a href="#">Offices</a></li> 
	</ul> 
  </li> 
  <li><a href="#">Services</a> 
	<ul> 
	  <li><a href="#">Web Design</a></li> 
	  <li><a href="#">Internet Marketing</a></li> 
	  <li><a href="#">Hosting</a></li> 
	  <li><a href="#">Domain Names</a></li> 
	  <li><a href="#">Broadband</a></li> 
	</ul> 
  </li> 
  <li><a href="#">Contact Us</a> 
	<ul> 
	  <li><a href="#">United Kingdom</a></li> 
	  <li><a href="#">France</a></li> 
	  <li><a href="#">USA</a></li> 
	  <li><a href="#">Australia</a></li> 
	</ul> 
  </li> 
</ul> 
</body>
</html>
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Хм проверил код... Даже не знаю почему всё время на конец... Пробовал сделать замыкание... не помогает.
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Я вот тоже непнимаю. Прогоняю скрипт в голове, все вродк должнно рабоать, а нет.
А еше вопрос, почему в Firefox и в Opera вообще ничего непроисходит. Мож у ся проверить. Плиз :rolleyes:
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Чтобы работало в Opera и FF надо поставить break в цикле, если найден элемент...
И ещё, попробуй повыводить алертами, скока раз проходит цикл, может что накапаешь...
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Да не за что...
Решил проблему с меню? Почему так отображается поменю?
Возможно криво идёт обход цикла...
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Не, подумал, что этот скрипт проще и удобней. Тут правда, меню через css, но чтоб в IE6 работало используется скрипт, т.к IE6 непонимает li:hover.

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Horizontall Drop Down Menus</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
startList = function() { 
	var nodes = document.getElementById("navbar").getElementsByTagName("LI"); 
	for (var i = 0; i < nodes.length; i++) { 
		nodes[i].onmouseover = function() { 
			this.className += " over"; 
		} 
		nodes[i].onmouseout = function() { 
			this.className = this.className.replace(new RegExp(" over\\b"), ""); 
		} 
	} 
} 

if (window.attachEvent) window.attachEvent("onload", startList);

</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: 12px Verdana, Arial, Helvetica, sans-serif;
	text-decoration: none;
	padding: 5px;
}
#navbar a:hover { 
	color: #E2144A;
	background: #CCCCCC; 
} 
/* styles for sub_navbar */
#navbar ul {
	position: absolute;
	display: none;
	width: 150px;
	margin: 0px;
	padding: 0px;
	list-style-type: none;
}
#navbar ul li {
	float: none;
}
#navbar ul a {
	background: #666666;
	padding: 4px;
}
#navbar ul ul {
	margin-top: -27px;
	margin-left: 150px;
}
		
#navbar li:hover ul, #navbar li.over ul { 
	display: block; 
} 
#navbar li:hover ul ul, #navbar li.over ul ul {
	display: none;
}
#navbar ul li:hover ul, #navbar ul li.over ul {
	display: block;
}
#navbar ul li:hover ul ul, #navbar ul li.over ul ul {
	display: none;
}
#navbar ul ul li:hover ul, #navbar ul ul li.over ul {
	display: block;
}

.str {
	font: 8px;
	font-weight: bold;
}

</style>
</head>
<body> 
<ul id="navbar"> 
  <li><a href="#">Home</a></li> 
  <li><a href="#">About</a> 
	<ul> 
	  <li><a href="#">History</a></li> 
	  <li><a href="#"><span class="str">></span> Team</a>
		<ul>
		  <li><a href="#">Fist Team</a></li>
		  <li><a href="#"><span class="str">></span> Second Team</a>
			<ul>
			  <li><a href="#">Echeneis</a></li>
			  <li><a href="#">Phtheirichthys</a></li>
			  <li><a href="#">Remora</a></li>
			  <li><a href="#">Remorina</a></li>
			  <li><a href="#">Rhombochirus</a></li>
			</ul>
		  </li>
		</ul>
	  </li> 
	  <li><a href="#">Offices</a></li> 
	</ul> 
  </li> 
  <li><a href="#">Services</a> 
	<ul> 
	  <li><a href="#">Web Design</a></li> 
	  <li><a href="#">Internet Marketing</a></li> 
	  <li><a href="#">Hosting</a></li> 
	  <li><a href="#">Domain Names</a></li> 
	  <li><a href="#">Broadband</a></li> 
	</ul> 
  </li> 
  <li><a href="#">Contact Us</a> 
	<ul> 
	  <li><a href="#">United Kingdom</a></li> 
	  <li><a href="#">France</a></li> 
	  <li><a href="#">USA</a></li> 
	  <li><a href="#">Australia</a></li> 
	</ul> 
  </li> 
</ul> 
</body>
</html>
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
А ты попробуй проверь этот скрипт в IE6, он вроде не прокатит, пробовал такоой эффект, работает тока в Opera и FireFox.
Это помоему уже css2, а ie6 его не поддерживает
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
А ты попробуй проверь этот скрипт в IE6, он вроде не прокатит, пробовал такоой эффект, работает тока в Opera и FireFox.
Это помоему уже css2, а ie6 его не поддерживает
Я читал про этот скрипт, что должен пахать в ie6, для этого тут js и нужен, я просто немогу проверить, у меня ie7, а в нем все рабоатет.

Вот где читал http://www.webmascon.com/topics/coding/42a.asp
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Проверил в IE6, как и ожидал, глюки...
Подменю показывется, но когда хочешь на него навести, оно исчезает... Да и отступы какие-то странные между опциями
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
ясн, опять ie6 все испортил. :mad:
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
А можешь посоветовать как написать скрипт, чтоб ненадо было прописывать у каждой ссылки события, и чтоб скрип работал с многоуровневыми меню. Просто мой, который я пытался сделать, он токо для одноуровнего меню.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Я сам с этим не заморачивался! Но думаю описать принцип смогу!
Есть первый UL, Обходим все LI и ставим на них over и out. Это у тебя уже было.
Но обход по родителю лучше запихнуть в функцию, и затем её рекурсивно вызывать!
Типа структуры
Код:
<ul>
<li>Лист 1-1</li>
<li>Лист 1-2</li>
<ul>
<li>Лист 2-1</li>
<li>Лист 2-2</li>
</ul>
<ul>
Вот вложенность, передаём в функцию параметр главного родителя.
При обработке ставятся over и out на LI, а если встречается ещё UL то рекурсивно вызывается таже функция, но с параметром данного UL
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Надо будет поробовать, когда время будет.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ