Добавление нескольких переключателей в форму - PullRequest
0 голосов
/ 10 июня 2018

Я хотел изменить цвет границы #bounds на зеленый, когда переключатель включен, но теперь, когда имеется более одного переключателя, он меняет первый цвет переключателя при нажатии на другие.

Iпросто хочу иметь возможность сделать несколько переключателей и сохранить первый переключатель для зеленого цвета = вкл. и серого = выкл.

$("input:radio").click(function(ev) {
  if (ev.currentTarget.value == "1") {
    $('#switchtoggle').removeClass('gray');
    $('#switchtoggle').addClass('green');

  } else if (ev.currentTarget.value == "0") {
    $('#switchtoggle').addClass('gray');
    $('#switchtoggle').removeClass('green');

  }
});
#switchtoggle {
  padding: 2px;
  transition: all .2s ease;
  border-radius: 2em;
  overflow: auto;
  float: left;
  color: transparent;
  border: 3px solid #e8e8e8;
}

#switchtoggle.active {
  border-color: #7FC6A6;
  transition: all 1s ease-in-out;
}

#switchtoggle label {
  float: left;
  width: 3.5em;
  height: 1.5em;
  margin: 0;
}

#switchtoggle label span {
  text-align: center;
  display: block;
  background: #7FC6A6;
  width: 1.75em;
  height: 1.5em;
  border-radius: 20px;
  transition: 350ms all;
  float: left;
}

#switchtoggle label input {
  position: absolute;
  width: 2.0em;
  height: 1.25em;
  opacity: 0;
}

#switchtoggle label input.off:checked+span {
  background-color: #e8e8e8;
  color: transparent;
  margin-left: 1.75em;
}

#switchtoggle label input.off:checked {
  display: none;
}

#switchtoggle label input.on:checked+span {
  background: #7FC6A6;
  color: transparent;
  border-radius: 1em;
  float: left;
  margin-left: 0;
}

#switchtoggle label input.on:checked {
  display: none;
}

.switchtoggle.gray {
  border: 3px solid #e8e8e8 !important;
}

.switchtoggle.green {
  border: 3px solid #7FC6A6 !important;
}

#switchtoggle label input.off:checked+#switchtoggle {
  border: 3px solid #e8e8e8 !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
NOFITICATIONS?<br>
<div id="switchtoggle" class="switchtoggle green">
  <label>
<input class="on" type="radio" name="notifications" value="1" checked>         
<input class="off" type="radio" name="notifications" value="0">
<span></span>
</label>
</div>
<br><br><br> EMAIL?
<br>
<div id="switchtoggle" class="switchtoggle gray">
  <label>
<input class="on" type="radio" name="emails" value="1">         
<input class="off" type="radio" name="emails" value="0" checked>
<span></span>
</label>
</div>

1 Ответ

0 голосов
/ 10 июня 2018

Ваш JavaScript в настоящее время пытается добавить и удалить зеленый / серый класс из элемента с помощью переключателя ID.Поскольку первое вхождение - это элемент переключения кулака, он переключил его.

Чтобы переключить элемент .switchtoggle выбранного радиовхода, найдите следующего родителя отмеченного флажка (с помощью функции jQuery parent ())который имеет класс .switchtoggle и удаляет / добавляет там класс:

$("input:radio").click(function(ev) {
  var label = $(ev.target).parents('.switchtoggle');
  if (ev.currentTarget.value == "1") {
    label.removeClass('gray');
    label.addClass('green');

  } else if (ev.currentTarget.value == "0") {
    label.addClass('gray');
    label.removeClass('green');

  }
});
#switchtoggle {
  padding: 2px;
  transition: all .2s ease;
  border-radius: 2em;
  overflow: auto;
  float: left;
  color: transparent;
  border: 3px solid #e8e8e8;
}

#switchtoggle.active {
  border-color: #7FC6A6;
  transition: all 1s ease-in-out;
}

#switchtoggle label {
  float: left;
  width: 3.5em;
  height: 1.5em;
  margin: 0;
}

#switchtoggle label span {
  text-align: center;
  display: block;
  background: #7FC6A6;
  width: 1.75em;
  height: 1.5em;
  border-radius: 20px;
  transition: 350ms all;
  float: left;
}

#switchtoggle label input {
  position: absolute;
  width: 2.0em;
  height: 1.25em;
  opacity: 0;
}

#switchtoggle label input.off:checked+span {
  background-color: #e8e8e8;
  color: transparent;
  margin-left: 1.75em;
}

#switchtoggle label input.off:checked {
  display: none;
}

#switchtoggle label input.on:checked+span {
  background: #7FC6A6;
  color: transparent;
  border-radius: 1em;
  float: left;
  margin-left: 0;
}

#switchtoggle label input.on:checked {
  display: none;
}

.switchtoggle.gray {
  border: 3px solid #e8e8e8 !important;
}

.switchtoggle.green {
  border: 3px solid #7FC6A6 !important;
}

#switchtoggle label input.off:checked+#switchtoggle {
  border: 3px solid #e8e8e8 !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
NOFITICATIONS?<br>
<div id="switchtoggle" class="switchtoggle green">
  <label>
<input class="on" type="radio" name="notifications" value="1" checked>         
<input class="off" type="radio" name="notifications" value="0">
<span></span>
</label>
</div>
<br><br><br> EMAIL?
<br>
<div id="switchtoggle" class="switchtoggle gray">
  <label>
<input class="on" type="radio" name="emails" value="1">         
<input class="off" type="radio" name="emails" value="0" checked>
<span></span>
</label>
</div>
...