Отключение кнопки «Отправить» до тех пор, пока обязательные поля не будут заполнены с помощью JavaScript

Я пытаюсь отключить кнопку отправки формы, пока не будут заполнены необходимые поля. Однако мой код, похоже, не проходит должным образом через условие, поскольку любой ввод включает кнопку отправки. https://codepen.io/ldanneman/pen/MWyGJMx?editors=0010

<form>
    <div class="form-box">
        <label for="fname">First Name<span>*</span></label>
        <input type="text" id="fname" name="First Name" placeholder="First Name" required><br>
        <label for="lname">Last Name</label>
        <input type="text" id="lname" name="Last Name" placeholder="Last Name"><br>
        <label for="email">Email<span>*</span></label>
        <input type="email" id="email" name="Email" placeholder="[email protected]" required><br>
        <label for="phone">Phone<span>*</span></label>
        <input type="tel" id="phone" name="Phone" placeholder="111-222-3333" required><br>
        <label for="comments">Comments<span>*</span></label>
        <textarea id="comments" name="comments"  placeholder="Comments" required></textarea><br>
    
      <button class="submit" type="submit">Submit</button>

    </div>
    
    
</form>
</div>

JavaScript:

let requiredInputs = document.querySelectorAll("[required]");
let submitButton = document.querySelector(".submit");

submitButton.disabled = true;

for(let i = 0; i < requiredInputs.length; i++){
requiredInputs[i].addEventListener("input", buttonState)
};

function buttonState() {
  if (requiredInputs.value === "") {
    submitButton.disabled = true;
  } else {
    submitButton.disabled = false;
  }
}


person coolps811    schedule 11.09.2020    source источник


Ответы (1)


Вы близки, но кода обратного вызова buttonState() недостаточно для выполнения того, что вы хотите. Он проверяет значение requiredInputs, которое представляет собой набор элементов ввода HTML. Что вы хотите сделать, так это перебрать каждый элемент в этой коллекции и проверить, установлено ли их значение:

function buttonState() {
  submitButton.disabled = Array.from(requiredInputs).some(x => x.value === '');
}

В приведенном выше коде будет использоваться some(), который вернет true, если какой-либо обратный вызов приведет к true, в случае, если значение ввода является пустой строкой.

person Daniel Gimenez    schedule 11.09.2020