Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Упрощение скрипта отображения div (https://javascript.ru/forum/misc/69200-uproshhenie-skripta-otobrazheniya-div.html)

PonyS 06.06.2017 17:30

Цитата:

Сообщение от рони (Сообщение 454691)
PonyS,
не осилил, скрипту без разницы какой блок изначально открыт или закрыт,и что в label,главное чтоб было какое -то id со страницы в label.

Сейчас вот такая структура:
#col0 {
display: block;
}
#col1 {
display: none;
}
#col2 {
display: none;
}
При заходе на страницу - блок #col0 отображается сразу, по клику на col1 показывается ниже блока #col0 блок #col1 вместо того чтобы сразу скрыть #col0 и показать #col1. По нужному он начинает работать если "потыкать" по очереди несколько раз, а если изначально поставить #col0 {
display: none;
} то все нормально переключает, но мне нужно чтобы изначально блок #col0 отображался, а остальные были скрыты, и показывать остальные только по клику на определенный label, а предыдущий( что был до этого) - сразу скрыть и показать нужный.

j0hnik 06.06.2017 17:37

Цитата:

Сообщение от ksa (Сообщение 454652)
Просто зачем так "спамить"?

Да это не специально :no: прости братец

рони 06.06.2017 18:02

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>

PonyS 06.06.2017 18:09

Цитата:

Сообщение от рони (Сообщение 454699)
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>

Прошу прощения, у меня на странице дублируются radio с value в связи с такой конструкцией...
<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>

рони 06.06.2017 18:32

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>

PonyS 06.06.2017 18:58

Спасибо большое, то что нужно!

PonyS 13.06.2017 15:38

Цитата:

Сообщение от рони (Сообщение 454703)
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>

Добрый день! Подскажите пожалуйста, как добавить в этот js код переменные (дублировать), чтоыб добавить 3-4-5 и т.д ряд <input name="fa1"><input name="fa2"><input name="fa3"> чтобы они все так же переключались, просто чтобы увеличить количество самого выбора, а то у меня получилось только копировать код полностью и менять name...Заранее спасибо!

PonyS 13.06.2017 16:06

У меня такая структура:
<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 его был видимый, а остальные скрыты), если расположение постоянно одинаковое - то все подходит, но если разное как у меня, и меняется постоянно, как заставить его понимать это? помогите пожалуйста...

рони 13.06.2017 16:13

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>

рони 13.06.2017 16:15

Цитата:

Сообщение от PonyS
У меня такая структура:

не понимаю


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