Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сделать элемент списка видимым по щелчку (https://javascript.ru/forum/misc/39945-sdelat-ehlement-spiska-vidimym-po-shhelchku.html)

_Alex9_ 18.07.2013 08:20

Сделать элемент списка видимым по щелчку
 
Я назначил всем дочерним элементам ul вложенного списка display:none. Как назначить обработчики onclick, по которым они будут делаться видимыми ?

ОлегА 18.07.2013 08:34

код выложите

ksa 18.07.2013 09:03

Цитата:

Сообщение от _Alex9_
Я назначил всем дочерним элементам ul вложенного списка display:none. Как назначить обработчики onclick, по которым они будут делаться видимыми ?

Клацать нужно на чем-то видимом...

_Alex9_ 18.07.2013 09:46

function main()
{
		workMenu("leftVerticalMenu");			
}

function log(obj)
{
	console.log(obj);
}

function workMenu(id)
{
   var menuContainer=document.getElementById(id).children[0];
   closeListsNodes(menuContainer);     
}

function closeListsNodes(container)
{	
	var object = container.getElementsByTagName("li");
	
	for(var i = 0;i < object.length;i++)
		{
		var need = object[i].getElementsByTagName("ul");
		
		for (var j = 0;j < need.length;j++)
		{
			need[j].style.display = "none";
			need[j].id = i.toString() + j.toString();
			need[j].onclick = function() {hideshow(need[j].id);};
		}
		}	
}

function hideshow(id){
     var need = document.getElementById(id); 
	
	if(need.style.display=='none'){
		need.style.display='block';
	}else{
		need.style.display='none';
		}
		
}

<!DOCTYPE html>
<html>
<head>
<title>Start Page</title>
<script src="engine.js" type="text/javascript"></script>
</head>
<body onload="main();">
<div id="leftVerticalMenu">
	<ul>
	<li>
		<a href="#">item 1</a>
		<ul>
		<li>
		    <a href="#">item 11</a>
			<ul>
				<li>
					<a href="#">item 111</a>
				</li>
				<li>
					<a href="#">item 112</a>
				</li>
			</ul>
		</li>
		<li>
			<a href="#">item 12</a>
		</li>
		</ul>
	</li>
	<li>
	<a href="#">item 2</a>
		<ul>
		<li>
			<a href="#">item 21</a>
		</li>
		<li>
			<a href="#">item 22</a>
		</li>
		</ul>
	</li>
	</ul>
</div>
</body>
</html>


Тут я назначил обработчики в цикле, но они не добавляются в код html.

ОлегА 18.07.2013 10:11

так вам событие onclick не на ul надо вешать а на <a href>

рони 18.07.2013 11:16

_Alex9_,
:write:
<!DOCTYPE html>
<html>
<head>
<title>Start Page</title>
<style type="text/css">
ul ul{
  display: none;
}
</style>
<script>
window.onload = function () {
       var a = document.getElementsByTagName('a')
       for (var i = 0; i < a.length; i++) {
           var ul = a[i].nextElementSibling;
           if (ul && ul.tagName == 'UL')
               a[i].onclick = (function (el) {
                   return function () {
                       el.style.display = el.style.display != 'block' ? 'block' : 'none';
                       return false
                  }
           })(ul)
       };
   }
</script>
</head>
<body >
<div id="leftVerticalMenu">
	<ul>
	<li>
		<a href="#">item 1</a>
		<ul>
		<li>
		    <a href="#">item 11</a>
			<ul>
				<li>
					<a href="#">item 111</a>
				</li>
				<li>
					<a href="#">item 112</a>
				</li>
			</ul>
		</li>
		<li>
			<a href="#">item 12</a>
		</li>
		</ul>
	</li>
	<li>
	<a href="#">item 2</a>
		<ul>
		<li>
			<a href="#">item 21</a>
		</li>
		<li>
			<a href="#">item 22</a>
		</li>
		</ul>
	</li>
	</ul>
</div>
</body>
</html>

_Alex9_ 18.07.2013 11:30

Спасибо. Работает. А для чего после функции в скобках тег - })(ul) ?

рони 18.07.2013 11:48

Цитата:

Сообщение от _Alex9_
А для чего после функции в скобках тег - })(ul)

чтобы сохранить ссылку на элемент который нужно открыть/закрыть иначе все клики будут открывать последний найденный элемент ul
смотрите Пример ошибочного использования


Часовой пояс GMT +3, время: 05:10.