Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Подключение нескольких document.getElementById (https://javascript.ru/forum/events/11054-podklyuchenie-neskolkikh-document-getelementbyid.html)

Avel Mink 04.08.2010 15:12

Подключение нескольких document.getElementById
 
Проблема состоит в том, что мне надо чтобы при нажатии на ссылку изменялся параметр стиля сразу у нескольких блоков. Если проще, то есть такой код:
<div onclick="document.getElementById('opro').style.display = 'none'; document.getElementById('ast').style.display = 'none'; document.getElementById('qwe').style.display = 'none'; и т.д. ">


мне всего лишь надо объединить эти функции в одну, потому что если добавить еще парочку таких, то почему то перестают действовать последние из них. Решение через for со счетчиком не подходит, нужно именно указывать разные id блоков(их всего будет 5-10 штук). Заранее спасибо за помощь

Gvozd 04.08.2010 15:40

div_element.onclick=function(){
document.getElementById('opro').style.display = 'none'; document.getElementById('ast').style.display = 'none'; document.getElementById('qwe').style.display = 'none'; и т.д. 
}

PS http://javascript.ru/tutorial/events

JsLoveR 04.08.2010 15:40

Avel Mink, ну как пример:

function changeStyle()
{
    for(var i=0;i<2;i++)
    {
        document.getElementById("div"+i).style.display = 'none';
    }
}

соответственно имена у дивов с id="div0" и id="div1"

chippolino 04.08.2010 15:46

<script type="text/javascript">
	window.onload=(function(){
		function $(a){return document.getElementById(a);}
		$('d1').onclick=(function(){
			ID=['d2','d3','d4'];
			for(k in ID){
				$(ID[k]).style.display='none';
			}
		});	
	});
</script>
<div id="d1">click</div>
<div id="d2">1</div>
<div id="d3">1</div>
<div id="d4">1</div>

Gvozd 04.08.2010 15:52

chippolino,
это не раздел по какому-либо фреймворку.
для них есть отдельный раздел.

chippolino 04.08.2010 15:58

Gvozd, а где ты тут видишь "какой-либо фреймворк"???

JsLoveR 04.08.2010 16:04

chippolino, на первый взгляд код похож на jquery, а у Вас просто функция с именем $, которая возвращает ссылку на элемент)

Avel Mink 04.08.2010 16:06

Цитата:

Сообщение от chippolino (Сообщение 66263)
<script type="text/javascript">
	window.onload=(function(){
		function $(a){return document.getElementById(a);}
		$('d1').onclick=(function(){
			ID=['d2','d3','d4'];
			for(k in ID){
				$(ID[k]).style.display='none';
			}
		});	
	});
</script>
<div id="d1">click</div>
<div id="d2">1</div>
<div id="d3">1</div>
<div id="d4">1</div>

Твой вариант мне подходит больше всего, но как сделать чтобы при нажатии на любой из блоков закрывались все остальные кроме него. То есть не было вот этой привязки по id
... $('d1').onclick ...
. Спасибо

Gvozd 04.08.2010 16:18

Цитата:

Сообщение от Avel Mink
как сделать чтобы при нажатии на любой из блоков закрывались все остальные кроме него. То есть не было вот этой привязки по id

с этого и надо было начинать
вы не стой стороны начали решать задачу
fucntion func(elem){
    var elems=...//список всех div-ов
    for(i=0;i<elems.length;i++){
        if(elems[i]!=elem)
            ...//скрываем элемент
    }
}

<div onclick="func(this)"></div>

Avel Mink 04.08.2010 16:23

если можно напишите примеры, что должно быть тут
... var elems=...//список всех div-ов ...

и тут
...//скрываем элемент ...

потому что я не разбираюсь в javascript. Спасибо

Gvozd 04.08.2010 16:26

Цитата:

Сообщение от Avel Mink
если можно напишите примеры, что должно быть тут
... var elems=...//список всех div-ов ...

http://javascript.ru/tutorial/dom/search
Цитата:

Сообщение от Avel Mink
и тут
...//скрываем элемент ...

этот код вы уже напсиали в своем первом сообщении, но там вы его много раз повторили отдельно для каждого элемента

JsLoveR 04.08.2010 16:31

Avel Mink, Gvozd Вам всё подробно расписал, примите и Вы немного усилия.

Avel Mink 04.08.2010 16:35

Цитата:

Сообщение от Gvozd (Сообщение 66280)
http://javascript.ru/tutorial/dom/search

этот код вы уже напсиали в своем первом сообщении, но там вы его много раз повторили отдельно для каждого элемента

я понимаю что знание хорошо и полезно, но я не собираюсь изучать javascript. Для написания этих двух строчек я потрачу пару часов, которые я могу потратить на более нужные действия. Будьте так добры напишите полный код с примерами, подставить свои значения я сам смогу.
PS^Если для Вас кажеться это пустяком, то для человека, который вообще не знаком с алгоритмом языка это затянеться надолго

chippolino 04.08.2010 16:55

<script type="text/javascript">//<!--
	window.onload=(function(){
		function $(a){return document.getElementById(a);}
		ID=['d1','d2','d3','d4'];
		for(k in ID){$(a=ID[k]).onclick=(function(){for(k in ID){(a=$(ID[k]))!=this?a.style.display='none':'';}});}
	});//-->
</script>		
<div id="d1">click1</div><div id="d2">click2</div><div id="d3">click3</div><div id="d4">click4</div>

Avel Mink 04.08.2010 17:01

Спасибо огромное chippolino, ну а всем остальным просто спасибо.

Avel Mink 04.08.2010 17:22

Почему данная конструкция не работает ?
<script type="text/javascript">
	window.onload=(function(){
		function $(a){return document.getElementById(a);}
		$('d1').onclick=(function(){
			ID=['qwe','opro','ast','prof'];
			for(k in ID){
				$(ID[k]).style.display='none';
			}
		});	
	});
</script>


Вернее не работает закрытие по последнему id, в данном случае 'prof', пробова менять их местами - результат один и тот же - работают только первые три id. Четвертый ни в какую не хочет

chippolino 04.08.2010 17:54

покажи весь свой код!

Aetae 04.08.2010 19:29

Вообще через css классы надо такое делать. =/

Маэстро 04.08.2010 22:06

Цитата:

Сообщение от Avel Mink (Сообщение 66278)
если можно напишите примеры, что должно быть тут
... var elems=...//список всех div-ов ...

и тут
...//скрываем элемент ...

потому что я не разбираюсь в javascript. Спасибо

Мне тоже стало интересно, что же будет написано в строке "список всех div-ов" ;) Пожалуй, ничего там написано не будет...
Вот рабочий пример:
<div id="opro" onclick=func(this)>111</div>
<div id="ast" onclick=func(this)>222</div>
<div id="qwe" onclick=func(this)>333</div>
<div id="zxc" onclick=func(this)>444</div>
<script type="text/javascript">
function func(elem){
    var elems=['opro','ast','qwe','zxc'];  //список всех ID div-ов
    for(i=0;i<elems.length;i++){
        if (elems[i] != elem.id)
        document.getElementById(elems[i]).style.display='none';    //скрываем элемент
    }
}
</script>

Но Вы до конца не додумали задачу. Закрыть все блоки кроме одного - это понятно. А каких Вы их потом открывать собираетесь?

Gvozd 04.08.2010 23:17

Цитата:

Сообщение от Avel Mink
я понимаю что знание хорошо и полезно, но я не собираюсь изучать javascript. Для написания этих двух строчек я потрачу пару часов, которые я могу потратить на более нужные действия. Будьте так добры напишите полный код с примерами, подставить свои значения я сам смогу.

этот форум предназначен, для тех кто собирается изучать, и изучает JS
и готов тратить ради этого знания свое время, так как знает, что ему это полезно.
полностью готовый код тут не принято писать
потому что:
Цитата:

дай человеку рыбу и ты накормишь его на один день. Научи человека рыбачить и ты накормишь его на всю жизнь.
то, что вам дали готовый код - это исключение.
и к сожалению для вас готовый код не оказался полезным, так как у вас сразу же возникли вопросы.
если бы вы изучили упомянутые мною статьи, новые вопросы вы бы спокойно решили.

Для тех, же кто не собирается тратить своей время на изучение JS, есть раздел "работа"
там вы потратите свои деньги
даром, практически ничего не получить. либо надо тратить время, либо деньги

Цитата:

Сообщение от Маэстро
Мне тоже стало интересно, что же будет написано в строке "список всех div-ов" Пожалуй, ничего там написано не будет...

предполагалась DOM-коллекция, либо же массив элементов
зависит от используемой верстки.
вариант с набором Id-шников, также хорош в частных случаях.

Avel Mink 05.08.2010 00:21

Цитата:

этот форум предназначен, для тех кто собирается изучать, и изучает JS
ну простите, что не туда зашел, я нашел собственное решение данной проблемы. Всем спасибо за участие

Conseque 10.09.2012 12:30

chippolino, Огромнейшее тебе спасибо за этот кусок!


Цитата:

Сообщение от chippolino (Сообщение 66263)
<script type="text/javascript">
	window.onload=(function(){
		function $(a){return document.getElementById(a);}
		$('d1').onclick=(function(){
			ID=['d2','d3','d4'];
			for(k in ID){
				$(ID[k]).style.display='none';
			}
		});	
	});
</script>
<div id="d1">click</div>
<div id="d2">1</div>
<div id="d3">1</div>
<div id="d4">1</div>



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