Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.12.2012, 21:15
Новичок на форуме
Отправить личное сообщение для Vhornets Посмотреть профиль Найти все сообщения от Vhornets
 
Регистрация: 24.09.2012
Сообщений: 8

Повторное срабатывание события
Уже в который раз сталкиваюсь с подобным, но все стеснялся спросить :
предположим, есть элементарный нумерованый список <ol>. У него есть скрытые классом .hide дети <li>. По клику на заголовке списка дети должны менять свой класс на .show и, соответствнно, отображаться. В общем-то совершенно типичная ситуация, но все дело в том, что класс меняется (дети отображаются) только единожды после проверки обработчиком, а при повторном срабатывании события класс не меняется (дети не скрываются).
window.onload = function() {
	
	var ol = document.getElementById("list");
		if(ol.addEventListener) {
			ol.addEventListener("click", showHide, false);
		}
		else if(ol.attachEvent) {
			ol.attachEvent("onclick", showHide);
		}
	
	function showHide(event) {
		var e = event || window.event;
		var target = e.target || e.srcElement;
		var child = target.childNodes;
		for(var i = 0; i<child.length; i++) {
			if(child[i].className = "hide") {
				child[i].className = "show";
			}
			else {
				child[i].className = "hide";
			}	
		}
	}
	
}

Разметка:
<ol id="list">
Lllist
<li class="hide">List 1</li>
<li class="hide">List 1</li>
<li class="hide">List 1</li>
<li class="hide">List 1</li>
</ol>
Стили (хотя тут все очевидно):
#list {
width:150px;
}
.hide{
display:none;
}
.show {
display:list-item;
}
Ответить с цитированием
  #2 (permalink)  
Старый 15.12.2012, 21:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Vhornets,
if(child[i].className == "hide")
Ответить с цитированием
  #3 (permalink)  
Старый 15.12.2012, 21:28
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Vhornets,
Если Вы обработчик привязываете к изменяемому параметру в данном контенте, class, к примеру( можно например к неизменяемомому, к примеру id)
То необходимо пользоваться либо live, в старых версиях JQ, либо on в новых от 1.7


(UPS

Последний раз редактировалось Deff, 15.12.2012 в 21:31.
Ответить с цитированием
  #4 (permalink)  
Старый 15.12.2012, 22:15
Новичок на форуме
Отправить личное сообщение для Vhornets Посмотреть профиль Найти все сообщения от Vhornets
 
Регистрация: 24.09.2012
Сообщений: 8

Сообщение от рони Посмотреть сообщение
Vhornets,
if(child[i].className == "hide")
Ёлки-палки. Так и знал, что ошибка будет позорной. Спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
запретить срабатывание события дочернего элемента, при перемещении родительского Danil jQuery 4 09.10.2011 10:53
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47
Срабатывание события при подведении к краю экрана Destrifer Общие вопросы Javascript 2 08.01.2009 15:12