AddClass RemoveClass действует по-разному в браузерах

Привет, я просмотрел ТАК много. Подобных вопросов много, но ответа не нашел.

У меня есть два флажка следующим образом:

<div class = "custom-chk">
  <label>
    <input name = "Residential" id = "Residential" class = "upsfilter" type = "checkbox" />
    Residential
  </label>
</div>
<div class = "custom-chk">
 <label>
   <input name = "Commercial" id = "Commercial" class = "upsfilter" type = "checkbox" />
   Commercial
 </label>
</div>

Я проверяю/снимаю отметку со следующим: (если один проверяет другой, снимите флажок)

$('.upsfilter').on('click', function (e) {
 if ($(this).prop('checked')) {
 $('.upsfilter').prop('checked', false);
 $('.upsfilter').parent().removeClass('checked');
 $(this).prop('checked', true);
 $(this).parent().addClass('checked');
 }
)};

$('.upsfilter').on('click', function(e) {
    if ($(this).prop('checked')) {
      $('.upsfilter').prop('checked', false);
      $('.upsfilter').parent().removeClass('checked');
      $(this).prop('checked', true);
      $(this).parent().addClass('checked');
    }
  
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class = "custom-chk">
  <label>
        <input name = "Residential" id = "Residential" class = "upsfilter" type = "checkbox" />
        Residential
      </label>
</div>
<div class = "custom-chk">
  <label>
       <input name = "Commercial" id = "Commercial" class = "upsfilter" type = "checkbox" />
       Commercial
     </label>
</div>

label class = "checked" показывает маленький пользовательский квадрат в флажке.

С кодами выше:

а) Фаерфокс, Хром. Check/Uncheck работает, но класс ярлыка = "проверено" работает наоборот. (отображение квадрата при проверке является ложным)

б) IE 11 работает нормально

Но если я удалю $(this).parent().addClass('checked');

Firefox и Chrome работают нормально, но IE делает то же самое (а)

Есть ли проблема совместимости с IE, Chrome или Firefox? Реакция IE имеет больше смысла. Любая помощь будет оценена по достоинству.

Спасибо.

Я предполагаю, что ваша проблема с опечаткой/синтаксисом JavaScript - это просто проблема с копированием/вставкой?

Mark Schultheiss 13.04.2019 07:09

@MarkSchultheiss Какая часть?

Evik Ghazarian 15.04.2019 17:17

Запустите фрагмент, в который я вставил код, см. ошибку

Mark Schultheiss 15.04.2019 17:23

О да. Починил это. Спасибо.

Evik Ghazarian 15.04.2019 17:28
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
4
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я использовал is(':checked'), чтобы проверить, установлен ли флажок, и closest('.custom-chk').siblings().find('.upsfilter'), чтобы найти следующее и предыдущее вхождение флажка. Надеюсь, это то, что вы ищете, спасибо

$('.upsfilter').click(function(e){
if ($(this).is(':checked'))
 {
   $(this).parent().addClass('checked');         //Adding class to current checkbox
   var check =$(this).closest('.custom-chk').siblings().find('.upsfilter')
   check.prop('checked',false)
   check.parent().removeClass('checked')        //Removes class of other checkbox
 
 }
 else
  $(this).parent().removeClass('checked');  

})
.checked
{
 color:red

}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "custom-chk">
  <label>
    <input name = "Residential" id = "Residential" class = "upsfilter" type = "checkbox" />
    Residential
  </label>
</div>
<div class = "custom-chk">
 <label>
   <input name = "Commercial" id = "Commercial" class = "upsfilter" type = "checkbox" />
   Commercial
 </label>
</div>

Это не удаляет класс, если он проверен UN

Mark Schultheiss 13.04.2019 06:42

Ну, если я запущу это, нажмите, чтобы проверить, что он станет красным, если я сниму флажок, он останется красным

Mark Schultheiss 13.04.2019 06:44
Ответ принят как подходящий

Вы можете использовать цель, к которой привязано событие, а затем переключать классы. После повторного прочтения я вижу, что вы хотите label с классом, поэтому я поправил его>

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

$('.custom-chk').on('change', '.upsfilter', function(event) {
  let me = $(this);
  let isChecked = me.prop("checked");
  let checks = $('.upsfilter');
  checks.not(me).prop('checked', false);
  checks.closest('label')
    .toggleClass('checked', false);
  checks.filter(':checked').closest('label')
    .toggleClass('checked', true);
});
.checked {
  border: solid red 1px;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class = "custom-chk">
  <label>
    <input name = "Residential" id = "Residential" class = "upsfilter" type = "checkbox" />
    Residential
  </label>
</div>
<div class = "custom-chk">
  <label>
   <input name = "Commercial" id = "Commercial" class = "upsfilter" type = "checkbox" />
   Commercial
 </label>
</div>

«Я отмечаю/снимаю отметку со следующим: (если один отметит другой, снимите отметку)» четко указано, что если один отмечен, то другой должен быть снят.

Deepak A 13.04.2019 06:53

Странный. Теперь с этим firefox, chrome и IE все делают наоборот.

Evik Ghazarian 15.04.2019 17:31

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

Mark Schultheiss 15.04.2019 17:34

Другие вопросы по теме