Как вызвать событие действительности формы, если входные данные не введены

#javascript #html #forms #bootstrap-4 #bootstrap-modal

Вопрос:

У меня есть простая форма с начальной загрузкой, которую мне нужно проверить перед отправкой. Он имеет автоматическую поддержку недопустимой обратной связи. Это выглядит так

 let forms = document.querySelectorAll(".needs-validation"); var productNameField = document.getElementById("productName");  productNameField.addEventListener("input", function () {  var val = document.getElementById("productName").value;  console.log("not entering here if I don't enter an input", val);  if (!isValidString(val)) {  productNameField.setCustomValidity("invalid");  } else {  productNameField.setCustomValidity("");  }  });     Array.prototype.slice.call(forms).forEach(function (form) {  form.addEventListener(  "submit",  function (event) {  if (!form.checkValidity()) {  console.log("not valid");  event.preventDefault();  event.stopPropagation();  }  console.log("here validation");  form.classList.add("was-validated");  },  false  );  }); 
 lt;form  action="/products/addProduct"  enctype="multipart/form-data"  class="needs-validation"  novalidate  method="post"  gt;  lt;div class="col-md-12 position-relative"gt;  lt;label for="productName" class="form-label"  gt;Product Namelt;/label  gt;  lt;input  type="text"  name="productName"  id="productName"  class="form-control"  /gt;  lt;div class="invalid-feedback"gt;  Please provide a valid Product Name(at least two  characters, no special characters allowed).  lt;/divgt;  lt;/divgt;   lt;divgt;  lt;button type="submit" id="savebutton" name="Submit"gt;  Create  lt;/buttongt;  lt;/divgt;  lt;/formgt; 

Теперь, когда я вводлю ввод, я сразу же вижу ошибку if !validString (из-за списка событий ввода). Но если я просто нажму на кнопку отправить, это не вызовет функцию validString.

Что мне делать ?

Ответ №1:

 const productNameField = document.getElementById("productName");    const isInputValid = function() {  return productNameField.value.length gt; 1;  }  const updateValidity = function() {  if (isInputValid()) {  productNameField.classList.remove('invalid')  } else {  productNameField.classList.add('invalid')  }  }    productNameField.addEventListener("input", updateValidity);      const forms = document.querySelectorAll(".needs-validation");    Array.prototype.slice.call(forms).forEach(function (form) {  form.addEventListener(  "submit",  function (event) {  updateValidity();  if (isInputValid()) {  console.log("validation complete");  form.classList.add("was-validated");  } else {  console.log("validation failed");  event.preventDefault();  }  }  );  });