jquery - требуется флажок с тем же именем в форме EDIT/MODIFY

Я использую этот код из атрибута Required для нескольких флажков с такое же имя? автор: Жомарт.

Он отлично работает, когда вы вводите новую запись, но при использовании в форме редактирования/изменения (которая загружает данные из базы данных) вам потребуется установить флажок, даже если в форме уже установлен (по крайней мере) один флажок. Не могли бы вы предложить, как изменить скрипт, чтобы он также учитывал, установлен ли уже хотя бы один флажок с тем же идентификатором/именем? Спасибо!!

Вот код:

$(function(){
var allRequiredCheckboxes = $(':checkbox[required]');
var checkboxNames = [];

for (var i = 0; i < allRequiredCheckboxes.length; ++i){
var name = allRequiredCheckboxes[i].name;
checkboxNames.push(name);
}

checkboxNames = checkboxNames.reduce(function(p, c) {
if (p.indexOf(c) < 0) p.push(c);
return p;
}, []);

for (var i in checkboxNames){
!function(){
  var name = checkboxNames[i];
  var checkboxes = $('input[name="' + name + '"]');
  checkboxes.change(function(){
    if(checkboxes.is(':checked')) {
      checkboxes.removeAttr('required');
    } else {
      checkboxes.attr('required', 'required');
    }
  });
}();
}

});`

КОД ДЛЯ АВТОМАТИЧЕСКОЙ ПРОВЕРКИ REQUIRED PLUS Этот код позволяет расширить обязательное значение до флажков, которые автозаполняются:

$(document).ready(function (){
$("#date").on('change', function(){//look at enter/change date
    for (var i = 1; i < 8; ++i){ //this removes previusly checked days
          document.getElementById("courseweekday"+i).checked = false;   
    }
    var weekdaynumber = $( "#weekdaynumber" ).val(); //get value of box id that needs to be checked
    document.getElementById("weekday"+weekdaynumber).click(); //check box with relative id  
 });  
});

Единственная проблема в том, что требуемый атрибут больше не работает, если флажок (после автоматической проверки) снят вручную.


person codeispoetry    schedule 18.01.2016    source источник
comment
Вы можете написать дополнительный код в готовом документе, чтобы проверить уже установленные флажки и удалить из них требуемый атрибут. Теперь вы выполняете эту проверку события change. Вам просто нужно получить код для первоначальной проверки готовности документа.   -  person Rajshekar Reddy    schedule 18.01.2016
comment
Спасибо, Редди, не могли бы вы дать мне пример кода, который я должен изменить?   -  person codeispoetry    schedule 18.01.2016
comment
Конечно, дай мне несколько минут   -  person Rajshekar Reddy    schedule 18.01.2016


Ответы (1)


Простое удаление обработчика события Change в приведенном выше коде будет работать при загрузке документа. Поместите этот код после последнего цикла for

 for (var i in checkboxNames){
  !function(){
  var name = checkboxNames[i];
  var checkboxes = $('input[name="' + name + '"]');

    if(checkboxes.is(':checked')) {
      checkboxes.removeAttr('required');
    } else {
      checkboxes.attr('required', 'required');
    }
   }();
}

ПРИМЕЧАНИЕ. Я удалил обработчик событий изменения. Все остальное - тот же код.

рабочая скрипта JS https://jsfiddle.net/RajReddy/yf17eL3p/3/

person Rajshekar Reddy    schedule 18.01.2016
comment
Приятно знать, что я был полезен. - person Rajshekar Reddy; 18.01.2016
comment
Извините, еще один быстрый вопрос, у меня есть несколько флажков, которые автоматически проверяются (т. Е. Когда выбрана дата, флажок с соответствующим днем ​​​​устанавливается автоматически). Я заметил, что (даже если флажок уже установлен автоматически с помощью javascript), мне нужно вручную перепроверить его, если нет, он будет продолжать требовать его. Как вы думаете, есть ли способ изменить код, чтобы этого избежать? Что-то вроде `if(checkboxes.is(':checked') || .checked = true )... `Спасибо!!! - person codeispoetry; 22.02.2016
comment
Это просто, как указано выше. См. приведенный выше ответ запускается при загрузке страницы, проверяет все отмеченные флажки и удаляет атрибут reuired. И, как вы делали это ранее, вы делали это при изменении события флажка. Теперь этот сценарий не загружает страницу и не изменяется событие. Решение заключается в том, что вы можете вместо изменения атрибута на отмеченный вы можете инициировать щелчок по флажкам, которые вы автоматически проверяете, это вызовет функцию изменения события, которая у вас уже есть, и работает нормально. ИЛИ вам нужно просто автоматически установить флажок, а в следующей строке удалить требуемый атрибут. - person Rajshekar Reddy; 22.02.2016
comment
Спасибо Редди! Я реализовал код с вашим комментарием (отредактируйте мой вопрос). Остался последний шаг... не могли бы вы взглянуть на мой отредактированный вопрос? Я там все написал. Спасибо!! - person codeispoetry; 22.02.2016
comment
когда я выбираю дату (2016-02-22), он автоматически устанавливает флажок соответствующего дня (понедельник). Но если затем я вручную сниму флажок с понедельника (чтобы день больше не проверялся), требование не работает, и я все равно могу отправить форму. Спасибо! - person codeispoetry; 22.02.2016
comment
Может быть, событие изменения для этого флажка не запускается, когда вы вручную снимаете его. или что-то там - person Rajshekar Reddy; 22.02.2016