Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Сделать невидимый блок видимым


Автор: arial 15.11.2004, 18:01
Код
<div style="display:none">Контент</div>
Как сделать этот блок видимым если браузер поддерживает javascript. Типа того:
Код
<div id="block" style="display:none" onLoad="document.block.visibility='show'">Контент</div>
Поможите чем можете.

Автор: Sardar 15.11.2004, 18:17
Код
document.getElementById("block").style.display="block";

У слоя нет события onLoad, если нужно показать слой сразу после загрузки(зачем?), то попробуй поставить скриптовый вызов после кода слоя. Если в слое картинки, то придётся ждать пока они загрузятся. Это сделать просто. Только я в задачу не вьезжаю smile

Автор: arial 16.11.2004, 17:46
Цитата(Sardar @ 15.11.2004, 19:17)
Только я в задачу не вьезжаю smile

Всё просто. Если браузер не поддерживает javascript, блок с кнопками, работающими через javascript не будет виден. smile

Автор: Alx 16.11.2004, 17:58
поствь на body!

Код

<body onload="document.getElementById('block').style.display='block';">
<div style="display:'none';">Содержание</div>

Автор: arial 16.11.2004, 19:01
А если скрываемых блоков несколько? Как их одной командой раскрыть?

Автор: sergejzr 16.11.2004, 19:09
В цикле каждый отдельно.

Автор: Alx 16.11.2004, 19:23
Код

<html>
<head>
<script>
function opBlocks()
{for (var i=0;i<document.getElementById("jsBlocks").childNodes.length;i++)
document.getElementById("jsBlocks").childNodes[i].style.display = "block";
}
</script>
</head>
<body>
<body onload="opBlocks()">
<span id="jsBlocks">
<div style="display:'none';">Содержание</div>
<div style="display:'none';">Содержание</div>
<div style="display:'none';">Содержание</div>
<div style="display:'none';">Содержание</div>
</span>
</body>
</html>


работает везде (IE, Opera 5.12+, Mozilla, FireFox, Netscape)
smile

Автор: Sardar 17.11.2004, 00:56
ALEXANDRO да!!! Это прогресс, наконец вижу код написанный согласно мировым стандартам, а не спецификациям от $MS smile

Одно замечание: в inline элементы(span) нельзя вставлять блоковые элементы(div), работать конечно будет, но их смысл теряется, да и у разных браузеров по разному башню сносить будет.

Задачу можно решить так:
Код
<html>
function opBlocks(){
 var els=document.getElmentsByTagName("DIV");
 for (var i=0; i<els.length; i++)
   if(els[i].getAttribute("jsprotected")) els[i].style.display="block"; ="";
}
...
<body onload="opBlocks()">
<div style="display:'none';" jsprotected>Содержание</div>
<div style="display:'none';" jsprotected>Содержание</div>
<div style="display:'none';" jsprotected>Содержание</div>
<div style="display:'none';" jsprotected>Содержание</div>
</body>
</html>

Или даже так:
Код
<html>
function opBlocks(){
 var els=document.getElmentsByName("jsprotected");
 for (var i=0; i<els.length; i++) els[i].style.display="block"; ="";
}
...
<body onload="opBlocks()">
<div name="jsprotected" style="display:'none';">Содержание</div>
<div name="jsprotected" style="display:'none';">Содержание</div>
<div name="jsprotected" style="display:'none';">Содержание</div>
<div name="jsprotected" style="display:'none';">Содержание</div>
</body>
</html>

Автор: Alx 17.11.2004, 09:22
Sardar
1. что значит
els[i].style.display="block"; ="";
2. лучше наверное все-таки их по ID назвать и разными именами. (1, 2, 3 и т.д.) smile

Автор: Sardar 17.11.2004, 10:23
Цитата(ALEXANDRO @ 17.11.2004, 08:22)
1. что значит

а я там коментарий // ставил, как сейчас помню... во меня ночью проглючило smile

Цитата(ALEXANDRO @ 17.11.2004, 08:22)
2. лучше наверное все-таки их по ID назвать и разными именами. (1, 2, 3 и т.д.)

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

Автор: Gold Dragon 17.11.2004, 11:11
А у меня говорит что объект не поддерживается это свойство или метод здесь
var els=document.getElmentsByName("jsprotected");

Добавлено @ 11:15

Нашёл smile getElementsByName

А вообще, это правильно обзывать всё одним именем?

Автор: Sardar 17.11.2004, 13:37
Цитата(Red @ 17.11.2004, 10:11)
А вообще, это правильно обзывать всё одним именем?

Да, имя это "просто" аттрибут. Конечно возможны траблы с document.all который выбирает элементы по имени и ID, но от этих коллекций нужно отказатся.

А вообще жутко не хватает XPath, DOM(1-2) в том виде в котором он сейчас удобен для редакрирования нескольких нод. Для удобной работы он не очень годится. ПРосто делали платформо не зависимо, а так могли бы добавить функции для пробега по коллекция, работы со списком нод как с одной, оченьгибкие выборки XPath и в HTML.

Автор: arial 17.11.2004, 19:12
Неработает!
Код
function opBlocks() {
   var els = document.getElementByName('jsprotected');
   for (var i = 0; i < els.length; i++) {
       els[i].style.display = 'block';
   }
}

<div name="jsprotected" style="display:none;">Содержание1</div>

Автор: Alx 17.11.2004, 19:46
замени в моём коде все div`ы на span`ы или наоборот.

Автор: Sardar 17.11.2004, 20:54
Цитата(arial @ 17.11.2004, 18:12)
var els = document.getElementByName('jsprotected');

Просто ты опечатался: var els = document.getElementsByName('jsprotected'); smile

Автор: arial 18.11.2004, 17:43
Я пробовал и getElement и getElements - не работает!

Автор: sergejzr 18.11.2004, 17:53
Возможно у тебя код обрабатывается раньше, чем загрузились сами элементы...
да, так и есть. функция вызывается onload, а боди ещё не загрузился smile... Попробуй просто перед </html> написать.
Код
<script>opBlocks();</script>


Удачи!
Сергей.

Автор: Sardar 1.12.2004, 13:14
Добавлю: ИЕ глючно работает с getElementsByName, точнее он не выдает SPAN, DIV, P и прочие текстовые. Так можно выбирать элементы формы, картинки и прочие вставляемые элементы. Как говорится "сделанно через Ж."

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)