Упрощение скрипта отображения div
Всем привет! Есть такой код
<script> function Selected(a) { var label = a.value; if (label=="col1") { document.getElementById('col1').style.display='block'; } else { document.getElementById('col1').style.display='none'; } if (label=="col2") { document.getElementById('col2').style.display='block'; } else { document.getElementById('col2').style.display='none'; } if (label=="col3") { document.getElementById('col3').style.display='block'; } else { document.getElementById('col3').style.display='none'; } } </script> По клику на radio - отображается нужный div. Я сделал так что каждый radio имеет value одинаковый с id блока который нужно показать, меняется только цифра, и их может быть от 1 до 30 примерно, помогите пожалуйста упростить этот код чтобы не приходилось писать под каждый radio и div новый код... Заранее спасибо! Вот что я пробовал, но логики не особо в нем вижу: <script> function Selected(a) { var label = a.value; if (label==label) { document.getElementById(label).style.display='block'; } else { document.getElementById(label).style.display='none'; } } </script> |
j0hnik,
:blink: |
PonyS,
var label = 'col1'; function Selected(a) { document.getElementById(label).style.display='none'; label = a.value; document.getElementById(label).style.display='block'; } |
Цитата:
|
Цитата:
|
j0hnik, у тебя по многим темам есть удаленные сообщения. :D Не части.
|
Цитата:
|
Цитата:
|
Цитата:
|
PonyS,
не осилил, скрипту без разницы какой блок изначально открыт или закрыт,и что в label,главное чтоб было какое -то id со страницы в label. |
Цитата:
#col0 { display: block; } #col1 { display: none; } #col2 { display: none; } При заходе на страницу - блок #col0 отображается сразу, по клику на col1 показывается ниже блока #col0 блок #col1 вместо того чтобы сразу скрыть #col0 и показать #col1. По нужному он начинает работать если "потыкать" по очереди несколько раз, а если изначально поставить #col0 { display: none; } то все нормально переключает, но мне нужно чтобы изначально блок #col0 отображался, а остальные были скрыты, и показывать остальные только по клику на определенный label, а предыдущий( что был до этого) - сразу скрыть и показать нужный. |
Цитата:
|
PonyS,
не понимаю ... ниже код ... что не так? <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #col0 { display: block; } #col1 { display: none; } #col2 { display: none; } </style> <script> var label = 'col0'; function Selected(a) { document.getElementById(label).style.display='none'; label = a.value; document.getElementById(label).style.display='block'; } </script> </head> <body> <style type="text/css"> .hot{ border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px } </style> <input name="f" type="radio" onclick="Selected(this)" value="col0"> <input name="f" type="radio" onclick="Selected(this)" value="col1"> <input name="f" type="radio" onclick="Selected(this)" value="col2"> <div class="hot" id="col0">0</div> <div class="hot" id="col1">1</div> <div class="hot" id="col2">2</div> </body> </html> |
Цитата:
<input name="f" type="radio" onclick="Selected(this)" value="col0"> <input name="f" type="radio" onclick="Selected(this)" value="col1"> <input name="f" type="radio" onclick="Selected(this)" value="col2">то бишь на странице 2 дубля таких radio с такими же col1,2,3 , но div только 1 , без дублей. Можно ли как-то связать radio ? чтобы не зависимо от того есть ли дубли такие же radio, все равно чтобы переключало нужный div который выбрали Вот такая сейчас у меня конструкция: <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #col0 { display: block; } #col1 { display: none; } #col2 { display: none; } </style> <script> var label = 'col0'; function Selected(a) { document.getElementById(label).style.display='none'; label = a.value; document.getElementById(label).style.display='block'; } </script> </head> <body> <style type="text/css"> .hot{ border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px } </style> <input name="f" type="radio" onclick="Selected(this)" value="col0"> <input name="f" type="radio" onclick="Selected(this)" value="col1"> <input name="f" type="radio" onclick="Selected(this)" value="col2"> <input name="fa" type="radio" onclick="Selected(this)" value="col0"> <input name="fa" type="radio" onclick="Selected(this)" value="col1"> <input name="fa" type="radio" onclick="Selected(this)" value="col2"> <div class="hot" id="col0">0</div> <div class="hot" id="col1">1</div> <div class="hot" id="col2">2</div> </body> </html> |
PonyS,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .hot { display: none; } .hot.open { display: block; } </style> <script> window.addEventListener('DOMContentLoaded', function() { var div = document.querySelectorAll(".hot"), f = document.querySelectorAll("[name='f']"), fa = document.querySelectorAll("[name='fa']"); temp = div[0]; [].forEach.call(f, function(item, i) { item.addEventListener('click', function() { temp.classList.remove("open") div[i].classList.add("open"); temp = div[i]; fa[i].checked = true; }); fa[i].addEventListener('click', function() { temp.classList.remove("open") div[i].classList.add("open"); temp = div[i]; f[i].checked = true; }); }); }); </script> </head> <body> <style type="text/css"> .hot{ border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px } </style> <input name="f" type="radio" > <input name="f" type="radio" > <input name="f" type="radio" > <input name="fa" type="radio" > <input name="fa" type="radio" > <input name="fa" type="radio" > <div class="hot open" >0</div> <div class="hot" >1</div> <div class="hot" >2</div> </body> </html> |
Спасибо большое, то что нужно!
|
Цитата:
|
У меня такая структура:
<input name="f" type="radio" > <input name="f" type="radio" > <input name="f1" type="radio" > <input name="f1" type="radio" > <input name="f2" type="radio" > <input name="f2" type="radio" > <input name="f3" type="radio" > <input name="f3" type="radio" > <div class="hot" >0</div> <div class="hot" >1</div> <div class="hot" >2</div> <div class="hot" >3</div> <div class="hot" >4</div> И проблема в том, что на странице их расположение постоянно разное, т о бишь может быть только f,f1 и f3, или только f1 и f3 для выбора(может быть сразу и 20 выборов, но разные по name). аналогично с функцией open(чтобы первый radio и div его был видимый, а остальные скрыты), если расположение постоянно одинаковое - то все подходит, но если разное как у меня, и меняется постоянно, как заставить его понимать это? помогите пожалуйста... |
PonyS,
не нужно копировать целииком ответ! для любых name="f..." <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .hot { display: none; } .hot.open { display: block; } </style> <script> window.addEventListener("DOMContentLoaded", function() { var a = document.querySelectorAll(".hot"), d = a.length, b = document.querySelectorAll("[name^='f']"), e = a[0]; [].forEach.call(b, function(f, g) { var c = g % d; f.addEventListener("click", function() { e.classList.remove("open"); a[c].classList.add("open"); e = a[c]; [].forEach.call(b, function(a, b) { a.checked = b % d == c }) }) }) }); </script> </head> <body> <style type="text/css"> .hot{ border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px } </style> <input name="f" type="radio" > <input name="f" type="radio" > <input name="f" type="radio" > <input name="fa" type="radio" > <input name="fa" type="radio" > <input name="fa" type="radio" > <div class="hot open" >0</div> <div class="hot" >1</div> <div class="hot" >2</div> </body> </html> |
Цитата:
|
Цитата:
|
решил вопрос с open через jquery -
$(".construct").find("div.hot:first").addClass("open");, спасибо большое за помощь! |
Цитата:
window.addEventListener("DOMContentLoaded", function() { var a = document.querySelectorAll(".hot"), d = a.length, b = document.querySelectorAll("[name^='f']"), e = a[0]; *!* e.classList.add("open"); */!* [].forEach.call(b, function(f, g) { var c = g % d; f.addEventListener("click", function() { e.classList.remove("open"); a[c].classList.add("open"); e = a[c]; [].forEach.call(b, function(a, b) { a.checked = b % d == c }) }) }) }); |
Часовой пояс GMT +3, время: 17:23. |