Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.11.2011, 11:03
Аспирант
Отправить личное сообщение для Gamestop Посмотреть профиль Найти все сообщения от Gamestop
 
Регистрация: 25.05.2011
Сообщений: 93

как обьявить функции по циклу
<
<ul id="base">
	<li>
		<a id="cat_1" href="">one</a>
		<ul id="group_1" class="group">
			<li>
			<a href="">one-one</a>
			</li>
			<li>
			<a href="">one-two</a>
			</li>
			<li>
			<a href="">one-three</a>
			</li>
		</ul>
	</li>
	<li>
		<a id="cat_2" href="">two</a>
		<ul id="group_2"  class="group">
			<li>
			<a href="">two-one</a>
			</li>
			<li>
			<a href="">two-two</a>
			</li>
			<li>
			<a href="">two-three</a>
			</li>
		</ul>
	</li>
	<li>
		<a  id="cat_3" href="">three</a>
		<ul id="group_3"  class="group">
			<li>
			<a href="">three-one</a>
			</li>
			<li>
			<a href="">three-two</a>
			</li>
			<li>
			<a href="">three-three</a>
			</li>
		</ul>
	</li>
	<li>
		<a id="cat_4" href="">four</a>
		<ul id="group_4"  class="group">
			<li>
			<a href="">four-one</a>
			</li>
			<li>
			<a href="">four-two</a>
			</li>
			<li>
			<a href="">four-three</a>
			</li>
		</ul>
	</li>
</ul>


document.addEventListener("DOMContentLoaded", function(){

	var el = document.getElementById('base').children.length
	for(var i = 1; i < el; i++)
	{
		document.getElementById('cat_' + i).onclick = function(){
		
			document.getElementById('group_' + i).style.display = "none"
			
			//Даже если alert(i) сделать то при нажатии на все кнопочки, будет показывать 4, 
			// как сделать чтобы на каждую кнопку своя циферка выводилась?, по порядку 1, 2, 3, 4
		
		}
		
	}
}, false)


локальная переменная i, в конце цикла и на первую обьявленную функцию вешается, а мне надо чтобы каждый cat_x, при нажатии на него прятал свою group_x, а то получается что они последнюю всегда будут прятать, это даже видно по алерту
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2011, 11:42
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

http://javascript.ru/basic/closure
Ответить с цитированием
  #3 (permalink)  
Старый 14.11.2011, 09:36
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 296

С использованием this работает.
document.addEventListener("DOMContentLoaded", function(){
    var el = document.getElementById('base').children.length
    for(var i = 1; i <= el; i++)
    {
        document.getElementById('cat_' + i).onclick = function(){
			this.parentNode.getElementsByTagName("ul")[0].style.display = "none"
        }
         
    }
}, false)


Да, добавьте символ # в href ссылок, уж если вам нужно их использовать, поскольку нажатие на ссылку с пустым href приводит (в хроме по крайней мере) к перезагрузке страницы и узел, соответственно, опять разворачивается.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аргументы функции и style info-work Events/DOM/Window 4 23.08.2011 11:38
Как передать элемент в переменную из функции kichSman jQuery 3 12.07.2011 22:16
как правильно передвать имя radiobutton в функции boris2000 Элементы интерфейса 2 03.08.2010 21:16
как получить фиксированный предопределенный аргумент функции JS kruvas Events/DOM/Window 5 02.09.2009 19:45
Как вывести на экран значение функции SELECT MAX(id) Владдд Серверные языки и технологии 3 25.01.2009 16:07