Всплывающие окна для установки / снятия флажка

#javascript #jquery #checkbox

#javascript #jquery #флажок

Вопрос:

У меня есть подсказки, которые выдают всплывающее окно, когда флажок установлен и снят. Похоже, что там есть строка избыточного кода, но после удаления функции больше не работают. Так что, может быть, не так уж и избыточно 🙂 Но #id ничему не соответствует (в настоящее время в качестве ЗАГЛАВНЫХ букв задано значение не совпадать)

Есть идеи, почему это мешает?

 $('#checkbox').click(function() {
  if ($("#checkbox").is(':checked')) {
    if (confirm('Are you sure you want to CONFIRM the order?')) {
      $('#CHECKBOX').click();
    }
  }
});

$("#checkbox").on('change', function() {
  this.checked = !this.checked ? !confirm('Do you really want to change this to NOT RECEIVED?') : true;
});
  

http://jsfiddle.net/5nd1wj54/1/

Комментарии:

1. комментирование $('#CHECKBOX').click(); ничего не меняет

2. Я также удалил открывающий {}, который был обернут вокруг них, когда я это делал, возможно, это было бы причиной сбоя функции. Однако, если там ничего нет, не следует ли их удалять?

Ответ №1:

Вот что, я думаю, вы имеете в виду

 $('#checkbox').click(function() {
  if (this.checked) {
    this.checked = confirm('Are you sure you want to CONFIRM the order?')); 
  }    
  else {
    this.checked = !confirm('Do you really want to change this to NOT RECEIVED?'); 
  }  
});
  

Ответ №2:

Используйте классы вместо идентификаторов, поэтому теперь необходим избыточный код. Вы можете хранить информацию в data атрибуте HTML-элемента. jsFiddle.

Я добавил класс к каждому флажку, который должен быть проверен.

 $(".checkIt").on('change', function() {
  if ($(this).is(':checked')) {
    confirm('Do you really want to change '   $(this).data('id')   ' to NOT RECEIVED?');
  }
});
  

HTML

 <input type="checkbox" data-id="checkbox1" class="checkIt" />
<input type="checkbox" data-id="checkbox2" class="checkIt" />
<input type="checkbox" data-id="checkbox3" class="checkIt" />
  

Комментарии:

1. по щелчку — лучшее событие, на мой взгляд. Некоторым браузерам требуется размытие для запуска изменений

2. подскажите мне браузер, подобный этому.

3. Наверняка некоторые старые. Смотрите более старую спецификацию — изменение : элемент управления теряет фокус ввода, и его значение было изменено с момента получения фокуса. Этот тип события должен быть отправлен до размытия типа события.

4. Вы дали мне спецификацию, а не браузер. Бьюсь об заклад, что 99,9% современных пользователей знают об изменении, даже IE9 (у меня его нет, не могу протестировать)

5. Но кого волнует, что click делает то же самое без возможности сбоя в любом браузере? На нашем сайте все еще 10% посетителей IE8