簡體   English   中英

完成必填字段后,如何允許提交表單?

[英]How to allow form to be submitted once required fields are completed?

我已經完成了帶有即時字段驗證的代碼,但如果字段沒有值,我也想阻止提交表單。 我已經設法阻止提交表單,但是當我 go 返回並提供一個值時,它仍然不允許它提交。 知道我在這里做錯了什么嗎?

這是 HTML:

<form id="contactForm" action="https://formspree.io/xrggbejj" method="POST" onsubmit="return formValidation(contactForm);">

  <div class="row">

  <div class="col">
    <label for="fName">First Name</label>
  </div>

  <div class="col">
    <input type="text" id="fName" name="firstname" onblur="checkFirstName(firstName)" autofocus/>
    <img src="../images/alert-icon.png" class="alert" id="firstNameMsg" alt="alert icon" width="40" height="35"/>
  </div>
  </div> <!-- End of row -->

  <div class="row">

  <div class="col">
    <label for="lName">Last Name</label>
  </div>

  <div class="col">
    <input type="text" id="lName" name="lastname" onblur="checkLastName(lastName)"/>
    <img src="../images/alert-icon.png" class="alert" id="lastNameMsg" alt="alert icon" width="40" height="35"/>
  </div>
  </div> <!-- End of row -->

  <div class="row">

  <div class="col">
    <label for="subject">Questions and/or Comments</label>
  </div>

  <div class="col">
    <textarea id="subject" name="subject" onblur="checkSubject(subject)" style="height:200px"></textarea>
    <img src="../images/alert-icon.png" class="alert" id="subjectMsg" alt="alert icon" width="40" height="35"/>
  </div>
  </div> <!-- End of row -->

  <div class="row">
    <input type="submit" value="SEND" />
  </div> <!-- End of row -->
</form>

這是 JavaScript:

聯系表單字段驗證

var alertStyle;
var alertImg;
const firstName = document.forms['contactForm']['fName'];
const lastName = document.forms['contactForm']['lName'];
const subject = document.forms['contactForm']['subject'];

function checkFirstName(firstName) {

  if (firstName.value === '') {
    alertStyle = document.getElementById('fName').style.border = '2px solid rgba(255, 6, 0)';
    alertImg = document.getElementById('firstNameMsg').style.display = 'inline-block';
    return false;
  } else if (firstName.value !== '') {
    alertStyle = document.getElementById('fName').style.border = '1px solid #ccc';
   alertImg = document.getElementById('firstNameMsg').style.display = 'none';
   return true;
 }
}

function checkLastName(lastName) {

  if (lastName.value === '') {
    alertStyle = document.getElementById('lName').style.border = '2px solid rgba(255, 6, 0)';
    alertImg = document.getElementById('lastNameMsg').style.display = 'inline-block';
    return false;
  } else if (lastName.value !== '') {
    alertStyle = document.getElementById('lName').style.border = '1px solid #ccc';
    alertImg = document.getElementById('lastNameMsg').style.display = 'none';
    return true;
 }
}

function checkSubject(subject) {

  if (subject.value === '') {
    alertStyle = document.getElementById('subject').style.border = '2px solid rgba(255, 6, 0)';
    alertImg = document.getElementById('subjectMsg').style.display = 'inline-block';
    return false;
  } else if (firstName.value !== '') {
    alertStyle = document.getElementById('subject').style.border = '1px solid #ccc';
    alertImg = document.getElementById('subjectMsg').style.display = 'none';
    return true;
}}

提交時聯系表單驗證

function formValidation(contactForm) {

  if (firstName && lastName && subject !== true) {
    alert('Please fill out required fields.')
    event.preventDefault()
    return false;
  } else if (firstName && lastName && subject === true) {
    return true;
 }
}

firstNamelastNamesubject變量指向輸入而不是它們內部的實際值。 您可以將 function 修改為

    function formValidation(contactForm) {

      if (!firstName.value || !lastName.value || !subject.value) {
        alert('Please fill out required fields.')
        event.preventDefault()
        return false;
      } else {
        return true;
      }
    }

這里我用了! 運算符在輸入為空時將輸入轉換為True ,如果任何輸入為空,則第一種情況將評估,否則您的 function 將返回真。

既然你這樣做

if (firstName && lastName && subject !== true) {
  ...
}

我假設您希望這樣做

 if (firstName.value === '') {
    alertStyle = document.getElementById('fName').style.border = '2px solid rgba(255, 6, 0)';
    alertImg = document.getElementById('firstNameMsg').style.display = 'inline-block';
    return false;

會做這樣的事情

firstName = true

但它實際上並沒有為firstName分配任何東西。 它只是返回真。

您可以使用isValid之類的變量並執行isValid = true而不是在您的checkLastName() etc..

但是,由於您正在這樣做

document.getElementById('lastNameMsg').style.display = 'none'

你可以做

function formValidation(contactForm) {

  if (document.getElementById('lastNameMsg').style.display !== 'none') {
    alert('Please fill out required fields.')
    event.preventDefault()
    return false;
  } else if (document.getElementById('lastNameMsg').style.display === 'none') {
    return true;
 }
}

無論如何,有多種方法可以簡化,但希望這能讓你繼續前進:)

干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM