Скрыть / Показать по checkbox

191
13 октября 2018, 04:20

Есть несколько чекбоксов и к каждому свой инпут, инпут должен скрываться и отображаться по чекбоксу, может кто подсказать красивое решение?

.conditions_check input[type="checkbox"]+label { 
  height: 1.25vw; 
  width: 1.25vw; 
  display: inline-block; 
  cursor: pointer; 
  border: 0.125vw #815eca solid; 
  border-radius: .7vw; 
  margin-top: 0.625vw; 
  margin-right: 0.5vw; 
  position: relative; 
  top: 0; 
  left: 0; 
} 
 
.conditions_check input[type="checkbox"]+label::before { 
  content: ""; 
  display: inline-block; 
  height: 1.25vw; 
  width: 1.25vw; 
  margin: 0 0.05vw 0 0; 
  background-repeat: no-repeat; 
  left: 0; 
  top: 0.3vw; 
} 
 
.conditions_check input[type="checkbox"]:checked+label::before { 
  background-image: url('img/check_tablink.png'); 
  background-position: -2.6vw -0.4vw; 
} 
 
.conditions_check { 
  display: inline-block; 
  height: 2.5vw; 
  width: 44vw; 
  box-shadow: 0 0.0625vw 0.125vw rgba(0, 0, 0, .2); 
  border-radius: 0.5vw; 
  color: #170738; 
  padding-left: 1vw; 
  margin-top: 1vw; 
}
<div class="conditions_check"> 
  <input id="conditions_check_telega1" type="checkbox" checkbox hidden> 
  <label for="conditions_check_telega1"></label> 
  <span>The user must be subscribed to the chanal</span> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <input id="conditions_check_telega2" type="checkbox" checkbox hidden> 
  <label for="conditions_check_telega2"></label> 
  <span>The user must have at least X subscribers</span> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <input id="conditions_check_telega3" type="checkbox" checkbox hidden> 
  <label for="conditions_check_telega3"></label> 
  <span>The user should repost a tweet with a hashtag</span> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div>

Answer 1

function conditionClick() { 
  //console.log(this.id, this.checked); 
  var $input = $(this).closest(".conditions_check").next(".conditions_input").find("input"); 
  this.checked? $input.show() : $input.hide(); 
} 
 
$(".conditions_check input[type='checkbox']").click(conditionClick).each(function() { 
  conditionClick.call(this); 
});
.conditions_check input[type="checkbox"]+label { 
  height: 1.25vw; 
  width: 1.25vw; 
  display: inline-block; 
  cursor: pointer; 
  border: 0.125vw #815eca solid; 
  border-radius: .7vw; 
  margin-top: 0.625vw; 
  margin-right: 0.5vw; 
  position: relative; 
  top: 0; 
  left: 0; 
} 
 
.conditions_check input[type="checkbox"]+label::before { 
  content: ""; 
  display: inline-block; 
  height: 1.25vw; 
  width: 1.25vw; 
  margin: 0 0.05vw 0 0; 
  background-repeat: no-repeat; 
  left: 0; 
  top: 0.3vw; 
} 
 
.conditions_check input[type="checkbox"]:checked+label::before { 
  background-image: url('img/check_tablink.png'); 
  background-position: -2.6vw -0.4vw; 
} 
 
.conditions_check { 
  display: inline-block; 
  height: 2.5vw; 
  width: 44vw; 
  box-shadow: 0 0.0625vw 0.125vw rgba(0, 0, 0, .2); 
  border-radius: 0.5vw; 
  color: #170738; 
  padding-left: 1vw; 
  margin-top: 1vw; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="conditions_check"> 
  <input id="conditions_check_telega1" type="checkbox" hidden checked> 
  <label for="conditions_check_telega1"></label> 
  <span>The user must be subscribed to the chanal</span> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <input id="conditions_check_telega2" type="checkbox" hidden checked> 
  <label for="conditions_check_telega2"></label> 
  <span>The user must have at least X subscribers</span> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <input id="conditions_check_telega3" type="checkbox" hidden checked> 
  <label for="conditions_check_telega3"></label> 
  <span>The user should repost a tweet with a hashtag</span> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div>

Answer 2

Удивительно, но это можно сделать и без js, зачем нам лишний раз грузить пользователя =) Вот очень красивое решение!

.item { 
  margin-bottom: 10px; 
} 
 
.checkbox { 
  cursor: pointer; 
} 
 
.checkbox:checked ~ input { 
  display: none; 
}
<div class="items"> 
  <div class="item"> 
    <input class="checkbox" type="checkbox" /> 
    <input type="text" placeholder="Input 1" /> 
  </div> 
  <div class="item"> 
    <input class="checkbox" type="checkbox" /> 
    <input type="text" placeholder="Input 2" /> 
  </div> 
  <div class="item"> 
    <input class="checkbox" type="checkbox" /> 
    <input type="text" placeholder="Input 3" /> 
  </div> 
</div>

Answer 3

Есть несколько чекбоксов и к каждому свой инпут, инпут должен скрываться и отображаться по чекбоксу, может кто подсказать красивое решение?

Вот такое решение на Javascript

var chks = document.querySelectorAll('input[type="checkbox"]') 
// Проходим по всем checkbox 
chks.forEach(function(chk) { 
  // Вешаем событие 
  chk.addEventListener('click', function(e) { 
    e.target.closest('.conditions_check') 
      .nextElementSibling 
      .firstElementChild 
      .classList.toggle('hidden'); // Добавлен класс или убираем 
  }) 
})
/********************  ********************/ 
label { 
  cursor: pointer; 
} 
 
.hidden { 
  display: none; 
} 
/********************  ********************/ 
.conditions_check label> input[type="checkbox"] { 
  height: 1.25vw; 
  width: 1.25vw; 
  display: inline-block; 
  cursor: pointer; 
  border: 0.125vw #815eca solid; 
  border-radius: .7vw; 
  margin-top: 0.625vw; 
  margin-right: 0.5vw; 
  position: relative; 
  top: 0; 
  left: 0; 
} 
 
.conditions_check label> input[type="checkbox"]::before { 
  content: ""; 
  display: inline-block; 
  height: 1.25vw; 
  width: 1.25vw; 
  margin: 0 0.05vw 0 0; 
  background-repeat: no-repeat; 
  left: 0; 
  top: 0.3vw; 
} 
 
.conditions_check  label>input[type="checkbox"]:checked::before { 
  background-image: url('img/check_tablink.png'); 
  background-position: -2.6vw -0.4vw; 
} 
 
.conditions_check { 
  display: inline-block; 
  height: 2.5vw; 
  width: 44vw; 
  box-shadow: 0 0.0625vw 0.125vw rgba(0, 0, 0, .2); 
  border-radius: 0.5vw; 
  color: #170738; 
  padding-left: 1vw; 
  margin-top: 1vw; 
}
<div class="conditions_check"> 
  <!-------- label > input > span --------> 
  <label for="conditions_check_telega1"> 
  <input id="conditions_check_telega1" type="checkbox" checkbox hidden> 
  <span>The user must be subscribed to the chanal</span> 
  </label> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <label for="conditions_check_telega2">  
 <input id="conditions_check_telega2" type="checkbox" checkbox hidden> 
  
  <span>The user must have at least X subscribers</span> </label> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <label for="conditions_check_telega3"> 
   <input id="conditions_check_telega3" type="checkbox" checkbox hidden> 
  <span>The user should repost a tweet with a hashtag</span></label> 
</div> 
<div class="conditions_input"> 
  <input type="text"> 
</div>

Answer 4

Второй вариант. А почему бы не перенести и так скрытый checkbox к input'y, все равно ведь его ни кно не видит, считай его нет. Так мы снова избавимся от скриптов

.checkbox:checked ~ input { 
  display: none; 
}
<div class="conditions_check"> 
  <label for="conditions_check_telega1"> 
  <span>The user must be subscribed to the chanal</span></label> 
</div> 
<div class="conditions_input"> 
  <input class="checkbox" id="conditions_check_telega1" type="checkbox" hidden> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <label for="conditions_check_telega2"> 
  <span>The user must have at least X subscribers</span></label> 
</div> 
<div class="conditions_input"> 
  <input class="checkbox" id="conditions_check_telega2" type="checkbox" hidden> 
  <input type="text"> 
</div> 
<div class="conditions_check"> 
  <label for="conditions_check_telega3"> 
  <span>The user should repost a tweet with a hashtag</span></label> 
</div> 
<div class="conditions_input"> 
  <input class="checkbox" id="conditions_check_telega3" type="checkbox" hidden> 
  <input type="text"> 
</div>

READ ALSO
Почему не отображаются изображения?

Почему не отображаются изображения?

Дали готовый конфиг с pug-ом на борту, всё отлично собирается-обновляется-билдится за исключением того что img(src="images/картинка") ни коннектит...

202
Разбор mp3 тегов (включая фото) на js

Разбор mp3 тегов (включая фото) на js

Подскажите пожалуйста библиотеку js для получения всех метатегов из mp3, включая( автор, название, продолжительность, заставка)

179
Проблема во время скроллинга страницы

Проблема во время скроллинга страницы

Я используяappend создал кнопку которая появляется после нажатия другой кнопки, и кнопка отобразилась не с первого раза, но потом все таки отобразилась,только...

168
Как соединить массивы?

Как соединить массивы?

Подскажите, пожалуйста, по задаче:

218