Недопустимый элемент управления формы с именем = '' не может быть сфокусирован С МОДАЛЬНЫМ - PullRequest
0 голосов
/ 24 октября 2018

Редактировать: это не дубликат, потому что я использую проверку HTML5 и обязательный атрибут, а когда ввод скрыт с модальным, требуемый атрибут удаляется из него.У меня он есть только по требованию, когда нажата фиксированная радиокнопка и когда модальное время открыто.При отправке формы она больше не требуется (хотя это может быть неправильным способом ее решения).

/*Change expiration date input to required once the fixed term choice is 
taken, change back when open-ended is chosen*/

function updateRequired() {
document.getElementById('expdate').required = true;
}

function updateNonRequiredCancel() {
document.getElementById('expdate').removeAttribute('required');
radiobtn = document.getElementById("openend");
radiobtn.checked = true;
}

function updateNonRequired() {
document.getElementById('expdate').removeAttribute('required');
}

Моя проблема:

Посмотрели некоторыепосты на эту тему, но пока никаких решений не сработало.У меня есть форма со многими данными, которые я пытаюсь проверить.В настоящее время я застрял в проверке входных данных в модале начальной загрузки, поскольку он продолжает выдавать мне ошибку: «Недопустимый элемент управления формы с именем = 'expdate' не может быть сфокусирован».когда я пытаюсь отправить форму.Все остальные входные данные хорошо проверяются за пределами переключателей и модальных.

Модальный режим переключается, когда выбран переключатель «фиксированный», и содержит данные для выбора срока годности.У меня есть некоторые функции onclick для: 1) при нажатии на open-end «expdate» больше не требуется 2) когда выбрана фиксированная дата, «expdate» требуется 3) при нажатии «отмены» внутри модального окна, 'expdate 'больше не требуется, и выбор радиокнопок автоматически переходит в открытое состояние. 4) При нажатии кнопки «Сохранить изменения» я проверяю, является ли поле «expdate» пустым или нет.

Эти функции onclick работают нормально, дляНапример, я не могу сохранить изменения в модале без ввода срока годности.Единственная проблема возникает при попытке отправить всю форму.

<fieldset>
    <div class="form-check form-check-inline">
         <input type="radio" required class="form-check-input" id="openend" 
name="term" onClick="updateNonRequired();">
         <label class="form-check-label" for="openend">
            Open-ended
         </label>
    </div>
    <div class="form-check form-check-inline">
         <input type="radio" class="form-check-input" 
onclick="updateRequired();" id="fixed-term" name="term" data-toggle="modal" 
data-target="#dateModal">
         <label class="form-check-label" for="fixed-term">
                Fixed-term
         </label>

         <div class="modal fade" id="dateModal" tabindex="-1" role="dialog" aria-hidden="true">
         <div class="modal-dialog modal-dialog-centered" role="document">
               <div class="modal-content">
                     <div class="modal-header">
                          <h4 class="end-date" id="end-date">Pick the end-date</h4>
               </div>
               <div class="modal-body">
                      <label for="expdate">
                              Enter a date of expiration:
                      </label>
                      <input type="date" oninvalid="InvalidTerm(this);" oninput="InvalidTerm(this);" id="expdate" class="form-control" name="expdate" min="2000-01-02" max="2020-01-01">
                       <br>
                       </div>
                       <div class="modal-footer">
                           <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="updateNonRequiredCancel();">Close</button>
                           <button type="button" class="btn btn-primary" onclick="ValidateModal();">Save changes</button>
                       </div>
                   </div>
              </div>
         </div>
    </div>
</fieldset>

И какой-то Javascript, который я использую, чтобы попытаться проверить 'expdate', пока модал открыт, который не работает, за исключением проверки, если полепусто (что устанавливает переменную isFine в true, а кнопка сохранения скрывает модальный):

var isFine = false;
function InvalidTerm(datebox) {
var date = new Date(datebox.value);

if (!isNaN(date.getTime())) {
    datebox.setCustomValidity('Required field!');
}
else if (datebox.validity.rangeOverflow || datebox.validity.rangeUnderflow){
    numberbox.setCustomValidity('Date must be between today and 2020-01- 
01');
}
else {
    datebox.setCustomValidity('');
}
isFine=true;
return true;
}       

function ValidateModal(){
     if (isFine === true) {
          //document.getElementById('expdate').removeAttribute('required'); //questionable
          $('#dateModal').modal('hide');
     }
     else{
          alert('no no');
     }
 }

Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...