Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450

Показать и скрыть слои

28.10.2016, 10:53. Показов 5356. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть три слоя Layer1, Layer2, Layer3 нужно так при нажатии button1 слой Layer1 показывается, а слои Layer2, Layer3 скрыты; при нажатии button2 слой Layer2 показывается, а слои Layer1, Layer3 скрыты; при нажатии button3 слой Layer3 показывается, а слои Layer1, Layer2 скрыты; При загрузке страницы должен быть виден слой Layer1.

Пока работает так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
button1.addEventListener("click", layer1);//скрываем и показываем слой Layer1
button2.addEventListener("click", layer2);//скрываем и показываем слой Layer2
button3.addEventListener("click", layer3);//скрываем и показываем слой Layer3
 
//Функция скрывает и показывает слой Layer1-------------------------------------------
 
function layer1() {
with (document.getElementById('Layer1').style)
    {
       if (display == "none")
           display = "block";
       else
           display = "none";
    }
};
//Функция скрывает и показывает слой Layer2-------------------------------------------
 
function layer2() {
with (document.getElementById('Layer2').style)
    {
       if (display == "none")
           display = "block";
       else
           display = "none";
    }
};
//Функция скрывает и показывает слой Layer3-------------------------------------------
 
function layer3() {
with (document.getElementById('Layer3').style)
    {
       if (display == "none")
           display = "block";
       else
           display = "none";
    }
};
Добавлено через 17 часов 47 минут
Почему такой вариант не работает?
JavaScript
1
2
3
4
5
6
7
8
9
function layer3() {
layerStyl3 = document.getElementById('Layer3').style;
    if (layerStyl3.style.display == "none") {
            layerStyl3.style.display = "block";
        } else {
            layerStyl3.style.display = "none";
    }
    
};
Такой работает
JavaScript
1
2
3
4
5
6
7
8
9
function layer3() {
with (document.getElementById('Layer3').style)
    {
       if (display == "none")
           display = "block";
       else
           display = "none";
    }
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2016, 10:53
Ответы с готовыми решениями:

Блок div скрыть/показать при нажатии на кнопку "показать все"
Добрый день. На странице: https://moscow.xn--80aasvalvca.xn--p1ai/ru/rezume/massagists/belyaevdv/ не могу понять, как сделать так...

Показать / Скрыть
Здравствуйте! помогите сделать скрипт показать скрыть по клику, как показано на фото. Заранее спасибо)

Скрыть показать блоки
Добрый день, подскажите команду JS типа такого $(document).on('click', '#showhide', function(){ ...

39
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 11:02
Лучший ответ Сообщение было отмечено Дмитрий Дмитрий как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
function layer3() {
layerStyl3 = document.getElementById('Layer3');
    if (layerStyl3.style.display == "none") {
            layerStyl3.style.display = "block";
        } else {
            layerStyl3.style.display = "none";
    }
    
};
1
9 / 9 / 2
Регистрация: 24.01.2016
Сообщений: 87
28.10.2016, 11:04
Цитата Сообщение от Дмитрий Дмитрий Посмотреть сообщение
Почему такой вариант не работает?
Потому что надо так писать:
JavaScript
1
layerStyl3.display
а не:
JavaScript
1
layerStyl3.style.display
1
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 11:08  [ТС]
Ясно, спасибо.
Ну а по основной проблеме не подскажите?
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 11:12
А где проблема то? Я вижу дано, вижу задачу, вижу реализацию. Проблему не вижу.
0
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 11:13  [ТС]
Есть три слоя Layer1, Layer2, Layer3 нужно так при нажатии button1 слой Layer1 показывается, а слои Layer2, Layer3 скрыты; при нажатии button2 слой Layer2 показывается, а слои Layer1, Layer3 скрыты; при нажатии button3 слой Layer3 показывается, а слои Layer1, Layer2 скрыты; При загрузке страницы должен быть виден слой Layer1.

В коде выше, приходиться каждый элемент скрывать.
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 11:22
JavaScript
1
2
3
4
5
6
7
8
function showLayer(layerNumber) { // Показываем слой с номером layerNumber. Остальные скрываем.
  for (var i = 1; i <= 3; i++) {
    var layerToHide  = document.getElementById('Layer'+i);
    layerToHide.style.display = "none";
  }
  var layerToShow  = document.getElementById('Layer'+layerNumber);
  layerToShow.style.display = "block";
}
Добавлено через 2 минуты
Цитата Сообщение от Дмитрий Дмитрий Посмотреть сообщение
При загрузке страницы должен быть виден слой Layer1
CSS
1
2
3
#Layer2, #Layer3 {
  display: none;
}
1
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 11:27  [ТС]
Так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
button1.addEventListener("click", showLayer(1));
button2.addEventListener("click", showLayer(2));
button3.addEventListener("click",showLayer(3));
 
function showLayer(1) { // Показываем слой с номером layerNumber. Остальные скрываем.
  for (var i = 1; i <= 3; i++) {
    var layerToHide  = document.getElementById('Layer'+i);
    layerToHide.style.display = "none";
  }
  var layerToShow  = document.getElementById('Layer'+1);
  layerToShow.style.display = "block";
}
 
function showLayer(2) { // Показываем слой с номером layerNumber. Остальные скрываем.
  for (var i = 1; i <= 3; i++) {
    var layerToHide  = document.getElementById('Layer'+i);
    layerToHide.style.display = "none";
  }
  var layerToShow  = document.getElementById('Layer'+2);
  layerToShow.style.display = "block";
}
 
function showLayer(3) { // Показываем слой с номером layerNumber. Остальные скрываем.
  for (var i = 1; i <= 3; i++) {
    var layerToHide  = document.getElementById('Layer'+i);
    layerToHide.style.display = "none";
  }
  var layerToShow  = document.getElementById('Layer'+3);
  layerToShow.style.display = "block";
}
0
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
28.10.2016, 11:28
Лучший ответ Сообщение было отмечено Дмитрий Дмитрий как решение

Решение

Есть еще такой вариант
HTML5
1
2
3
4
5
6
<button id="btn1" data-trg="layer1">Button1</button>
<button id="btn2" data-trg="layer2">Button2</button>
<button id="btn3" data-trg="layer3">Button3</button>
<div id="layer1">layer1</div>
<div id="layer2">layer2</div>
<div id="layer3">layer3</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
var btns = document.querySelectorAll('[id^="btn"]'),
  layers = document.querySelectorAll('[id^="layer"]');
[].forEach.call(btns, function(elem) {
  elem.addEventListener('click', showHide, false);
});
 
function showHide() {
  var btnTrg = this.getAttribute('data-trg');
  [].forEach.call(layers, function(elem) {
    elem.style.display = (elem.id == btnTrg) ? 'block' : 'none'
  })
}
1
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 11:30
Лучший ответ Сообщение было отмечено Дмитрий Дмитрий как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
button1.addEventListener("click", showLayer(1));
button2.addEventListener("click", showLayer(2));
button3.addEventListener("click",showLayer(3));
 
function showLayer(layerNumber) { // Показываем слой с номером layerNumber. Остальные скрываем.
  for (var i = 1; i <= 3; i++) {
    var layerToHide  = document.getElementById('Layer'+i);
    layerToHide.style.display = "none";
  }
  var layerToShow  = document.getElementById('Layer'+layerNumber);
  layerToShow.style.display = "block";
}
1
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 11:36  [ТС]
Не работает(((
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 11:37
Покажите разметку
0
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 11:56  [ТС]
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!doctype html>
<html lang="ru">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
<meta charset="utf-8">
</head>
<body>
<div id="container">
<div id="Layer3">
<div id="Layer3_Container">
<div id="Layer2">
<div id="Layer2_Container">
<div id="Layer4">
<div id="Layer4_Container">
<input type="button" id="mobilButton1" name="" value="Вертикальные">
<input type="button" id="mobilButton2" name="" value="Горизонтальные">
<input type="button" id="mobilButton3" name="" value="Рулонные">
</div>
</div>
<div id="Layer1">
<div id="Layer1_Container">
</div>
</div>
Добавлено через 14 минут
data-trg= это что, с чем едят))
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 12:14
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (var i = 1; i <= 3; i++) {
  var button = document.getElementById('mobilButton'+i);
  button.number = i;
  button.addEventListener("click", showLayer);
}
 
function showLayer() { 
  for (var i = 1; i <= 3; i++) {
    var layerToHide  = document.getElementById('Layer'+i);
    layerToHide.style.display = "none";
  }
  var layerToShow  = document.getElementById('Layer'+this.number);
  layerToShow.style.display = "block";
}
Добавлено через 1 минуту
JavaScript
1
button1.addEventListener("click", showLayer(1));
Такая конструкция некорректна. Прошу прощения за введение в заблуждение.
1
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 12:18  [ТС]
У меня к button все привязано т.е. они выполняют функции
button1 = byId('mobilButton1');
button2 = byId('mobilButton2');
button3 = byId('mobilButton3');

byId('mobilButton1').onclick = get1;
byId('mobilButton2').onclick = get2;
byId('mobilButton3').onclick = get3;

и скрывают слои, как привязать то ваш код теперь)))
0
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
28.10.2016, 12:20
Цитата Сообщение от Дмитрий Дмитрий Посмотреть сообщение
data-trg= это что, с чем едят
Атрибуты data-*
В данном случае, в атрибуте указываем какой слой делает видимым конкретная кнопка.
0
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 12:31  [ТС]
Выдает ошибку Uncaught TypeError: Cannot read property 'style' of null(…)
Цитата Сообщение от Balanaar Посмотреть сообщение
JavascriptВыделить код

for (var i = 1; i <= 3; i++) {
var button = document.getElementById('mobilButton'+i) ;
button.number = i;
button.addEventListener("click", showLayer);
}

function showLayer() {
for (var i = 1; i <= 3; i++) {
var layerToHide = document.getElementById('Layer'+i);
layerToHide.style.display = "none";
}
var layerToShow = document.getElementById('Layer'+this.num ber);
layerToShow.style.display = "block";
}
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
28.10.2016, 12:35
Цитата Сообщение от Дмитрий Дмитрий Посмотреть сообщение
var layerToHide *= document.getElementById('Layer'+i);
Что за звездочки там такие интересные появились у вас перед "="?

Добавлено через 2 минуты
Вот ваш пример в песочнице:
http://codepen.io/anon/pen/JRqpbg
0
Эксперт JSЭксперт HTML/CSS
 Аватар для mrtoxas
3827 / 2677 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
28.10.2016, 12:42
Вот еще вариант, разметку не трогал. Но можно еще упростить.
HTML5
1
2
3
4
5
6
<input type="button" id="mobilButton1" name="" value="Вертикальные">
<input type="button" id="mobilButton2" name="" value="Горизонтальные">
<input type="button" id="mobilButton3" name="" value="Рулонные">
<div id="layer1">layer1</div>
<div id="layer2">layer2</div>
<div id="layer3">layer3</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var button1 = document.getElementById('mobilButton1'),
  button2 = document.getElementById('mobilButton2'),
  button3 = document.getElementById('mobilButton3'),
  layers = document.querySelectorAll('[id^=layer]');
 
button1.addEventListener("click", hideShow.bind(0,'layer1'),false);
button2.addEventListener("click", hideShow.bind(0,'layer2'),false);
button3.addEventListener("click", hideShow.bind(0,'layer3'),false);
 
function hideShow(lay){
  [].forEach.call(layers,function(elem){
    elem.style.display = (elem.id == lay)?'block':'none';
  })
}
1
 Аватар для Дмитрий Дмитрий
1 / 1 / 2
Регистрация: 17.09.2016
Сообщений: 450
28.10.2016, 13:16  [ТС]
Добавлено через 8 минут
Исправил, все работает, спасибо, вы как всегда на высоте проффесор mrtoxas )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2016, 13:16
Помогаю со студенческими работами здесь

Показать\Скрыть текст
Подскажите пожалуйста какую нибуть функцию(скрипт) для того чтобы при нажатии на заголовок открывался весь текст при повторном закривался

скрыть/показать блок
пишу вот такой код &lt;html&gt; &lt;head&gt; &lt;style type=&quot;text/css&quot;&gt; #box { display:none} &lt;/style&gt; &lt;script...

Показать, скрыть блок
Добрый день! Такой вопрос, есть блок &quot;Заголовок&quot; при клике на который должен появляться блок с текстом. А при повторном клике...

JS показать/скрыть элементы
Почему открывает блок menu сперва после второго клика, а потом нормально работает, по клику - показывает/скрывает. Перезагружаю страницу,...

Показать/скрыть элементы на странице
код такой &lt;script type=text/javascript language=JavaScript&gt; &lt;!-- function q3_onclick() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru