iam_not_a_robot
@iam_not_a_robot

Как сократить код на JS?

Есть 2 инпута:
<input type="checkbox" name="d1" value="p1" id="dop_1" onclick="click_dop_1()">
<input type="checkbox" name="d1" value="p1" id="dop_2" onclick="click_dop_1()">

И 2 функции к ним:
function click_dop_1(){
        if (document.getElementById('dop_1').checked){
          div1.style.display = 'block';
        }else{
          div1.style.display = 'none';
        }
    }

    function click_dop_2(){
        if (document.getElementById('dop_2').checked){
          div2.style.display = 'block';
        }else{
          div2.style.display = 'none';
        }
    }

Как правильно оптимизировать этот код и совместить всё в одной функции, ведь они выполняют абсолютно одинаковую задачу, только для разных блоков.
  • Вопрос задан
  • 266 просмотров
Решения вопроса 5
werty1001
@werty1001
undefined
<div id="somediv" style="display:none;">1111</div>
<div id="somediv2" style="display:none;">2222</div>

<input type="checkbox" data-show="somediv">
<input type="checkbox" data-show="somediv2">

(function(){

  var checkboxs = document.querySelectorAll('input[data-show]');
  
  for (var i=checkboxs.length; i--;) {
    checkboxs[i].addEventListener('change', function() {
      document.getElementById(this.dataset.show).style.display = (this.checked ? 'block' : 'none');
    });
  }

})();


jsfiddle
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Использовать this или event.target.
Ответ написан
Комментировать
@lemme
Frontend
Самое простое:
document.getElementById('dop_2').checked
Заменить на
this.checked
Ответ написан
kalyukdo
@kalyukdo
Frontend developer
<input type="checkbox" name="d1" value="p1"  onclick="click_dop()">
<div id="wrap-d1">text d1</div>
<input type="checkbox" name="d2" value="p1"  onclick="click_dop()">
<div id="wrap-d2"> text d2</div>


function click_dop(){
   document.getElementById('wrap-' + this.name).style.display = this.checked ? 'block' : 'none' ;
}

Как то так
Ответ написан
Комментировать
@lega
То же самое что и у Олег только проще (без js) - https://jsfiddle.net/lega911/92r8zs10/

подробности тут: https://habrahabr.ru/post/272125/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы