Javascript 表单验证 - 遗漏了什么?

标签 javascript html

我一直在寻找我的表单验证在过去 3 小时内无法正常工作的原因,而且似乎找不到答案。

我在 HTML 中有外部脚本文件、表单 ID、onclick 事件。我错过了什么?有人可以帮忙吗?

HTML

<script src="registration.js"></script>
<form id="registration">
  <fieldset>
    <legend>Individual/Company Details</legend>
    <br />
    <label class="error">Fields with an asterisk (*) are required</label>
    <br />
    <br />
    <label>First Name *: </label>
    <br />
    <input id="firstname" name="firstname" type="text" />
    <br />
    <label>Last Name *: </label>
    <br />
    <input id="lastname" name="lastname" type="text" />
    <br />
    <label>Username *: (alpha-numeric characters only) </label>
    <br />
    <input id="username" name="username" type="text" />
    <br />
    <label>Password *: (8 characters with 2 characters being numbers) </label>
    <br />
    <input id="password" name="password" type="password" />
    <br />
    <label>Date of Birth: (dd/mm/yyyy) </label>
    <br />
    <input id="dob" name="dob" type="text" />
    <br />
    <label>Gender: </label>
    <br />
    <br />
    <input id="gender" class="radio" name="gender" type="radio" value="Male" />Male
    <input class="radio" name="gender" type="radio" value="Female" />Female
    <input class="radio" name="gender" type="radio" value="Other" />Other
    <br />
    <br />
    <label>E-mail *: </label>
    <br />
    <input id="email" name="email" type="text" />
    <br />
    <label>Address *: (alpha-numeric characters only)</label>
    <br />
    <textarea id="address" name="address" cols="20" rows="10"></textarea>
    <br />
  </fieldset>
  <fieldset>
    <legend>Membership</legend>
    <br />
    <label>Membership Type *: </label>
    <select id="membership" name="membership">
            <option value= "" selected= "selected">(select membership type)</option>
            <option value= "gold">Gold</option>
            <option value= "silver">Silver</option>
            <option value= "mithril">Mithril</option>
        </select>
    <br />
    <br />
  </fieldset>
  <p class="buttons">
    <label>
            <input class= "button" type= "reset" value= "Clear" />
            <input class= "button" type= "submit" value= "Submit" onclick= "validateForm();" />
        </label>
  </p>
</form>

注册.js

// JavaScript Document

// Conditions are checked upon submission of form and error messages are displayed
function validateForm() {
  var error_message = "";

  // Different functions for validation of different input
  error_message += validateFirstName();

  error_message += validateLastName();

  error_message += validateUserName();

  error_message += validatePassword();

  error_message += validateDoB();

  error_message += validateGender();

  error_message += validateEmail();

  error_message += validateAddress();

  error_message += validateMembership();

  error_message += validateDuration();

  if (error_message != "") {
    alert("Some fields have invalid entry:\n" + error_message);
    return false;
  }

  return true;
}

// Validation of First Name
function validateFirstName() {
  var error = "";
  var nonletters = /[^a-zA-Z]+/;

  if (document.forms["registration"]["firstname"].value.length == 0) // condition is checked if field is left blank
  {
    registration.firstname.focus();
    error = "First name is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["firstname"].value.match(nonletters)) // condition is checked if field is alphabetical characters only
  {
    registration.firstname.focus();
    registration.firstname.select();
    error = "Alphabetical characters only for first name \n"; // error message is displayed if field is not alphabetical characters only
  }

  return error;
}

// Validation of Last Name
function validateLastName() {
  var error = "";
  var nonletters = /[^a-zA-Z]+/;

  if (document.forms["registration"]["lastname"].value.length == 0) // condition is checked if field is left blank
  {
    registration.lastname.focus();
    error = "Last name is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["lastname"].value.match(nonletters)) // condition is checked if field is alphabetical characters only
  {
    registration.lastname.focus();
    registration.lastname.select();
    error = "Alphabetical characters only for last name \n"; // error message is displayed if field is not alphabetical characters only
  }

  return error;
}

// Validation of User Name
function validateUserName() {
  var error = "";
  var nonalphanum = /[^0-9a-zA-Z]+/;

  if (document.forms["registration"]["username"].value.length == 0) // condition is checked if field is left blank
  {
    registration.username.focus();
    error = "User name is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["username"].value.match(nonalphanum)) // condition is checked if field is alpha-numeric characters only
  {
    registration.username.focus();
    registration.username.select();
    error = "Alpha-numeric characters only for user name \n"; // error message is displayed if field is not alpha-numeric characters only
  }

  return error;
}

// Validation of Password
function validatePassword() {
  var error = "";
  var nonalphanum = /[^0-9a-zA-Z]+/;
  var numbers = /(?=(.*\d){2})/;

  if (document.forms["registration"]["password"].value.length == 0) // condition is checked if field is left blank
  {
    registration.password.focus();
    error = "Password is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["password"].value.length != 8) // condition is checked if password is not eight characters
  {
    registration.password.focus();
    registration.password.select();
    error = "Password of 8 characters is required \n"; // error message is displayed if password is not eight characters
  } else if (document.forms["registration"]["password"].value.match(nonalphanum)) // condition is checked if field is alpha-numeric characters only
  {
    registration.password.focus();
    registration.password.select();
    error = "Alpha-numeric characters only for password \n"; // error message is displayed if field is not alpha-numeric characters only
  } else if (!(document.forms["registration"]["password"].value.match(numbers))) // condition is checked if field has at least two numbers
  {
    registration.password.focus();
    registration.password.select();
    error = "Password must contain at least 2 numbers \n"; // error message is displayed if field does not have at least two numbers
  }

  return error;
}

// Validation of Date of Birth
function validateDoB() {
  var error = "";
  var dob = document.forms["registration"]["dob"].value;
  var validdob = /\d{2}\/\d{2}\/\d{4}/;

  if (dob.length == 0) // condition is checked if field is left blank
  {
    error = ""; // no error message is displayed if field is blank
  } else if (!(dob.match(validdob))) // condition is checked if field is in correct format
  {
    registration.dob.focus();
    registration.dob.select();
    error = "Please enter date of birth in valid format \n"; // error message is displayed if field is in incorrect format
  }

  return error;
}

// Validation of Gender
function validateGender() {
  var error = "";

  if (document.forms["registration"]["gender"].value.unchecked) // condition is checked if field is left blank
  {
    error = ""; // no error message is displayed if field is blank
  }

  return error;
}


// Validation of Email Address and format validity
function validateEmail() {
  var error = "";
  var email = document.forms["registration"]["email"].value;
  var emailformat = /\w+([\.-]?\w{1})*@\w{1}([\.-]?\w+)*(\.\w{1})+/

  if (email.length == 0) // condition is checked if field is left blank
  {
    registration.email.focus();
    error = "Email address is required \n"; // error message is displayed if field is blank
  } else if (!(email.match(emailformat))) // condition is checked if field is in correct format
  {
    registration.email.focus();
    registration.email.select();
    error = "Please enter a valid email address \n"; // error message is displayed if invalid email address entered
  }

  return error;
}

// Validation of Address
function validateAddress() {
  var error = "";
  var nonalphanum = /[^0-9a-zA-Z]+/;

  if (document.forms["registration"]["address"].value.length == 0) // condition is checked if field is left blank
  {
    registration.address.focus();
    error = "An address is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["address"].value.match(nonalphanum)) // condition is checked if field is alpha-numeric characters only
  {
    registration.address.focus();
    registration.address.select();
    error = "Alpha-numeric characters only for address \n"; // error message is displayed if field is not alpha-numeric characters only
  }

  return error;
}

// Validation of Membership Type
function validateMembership() {
  var error = "";

  if (document.forms["registration"]["membership"].value == "default") // condition is checked if field is left as default
  {
    registration.membership.focus();
    error = "Membership type must be selected \n"; // error message is displayed if field is not selected
  }

  return error;
}

// Validation of Membership Duration
function validateDuration() {
  var error = "";

  if (document.forms["registration"]["duration"].value == "default") // condition is checked if field is left as default
  {
    registration.duration.focus();
    error = "Membership duration must be selected \n"; // error message is displayed if field is not selected
  }

  return error;
}

最佳答案

删除 <input class= "button" type= "submit" value= "Submit" onclick= "validateForm();" />

使用

document.getElementById("registration").addEventListener("submit", validateForm);

在你的 js 文件中,试试这个:

function validateForm(event) {
  var error_message = "";

  // Different functions for validation of different input
  error_message += validateFirstName();

  error_message += validateLastName();

  error_message += validateUserName();

  error_message += validatePassword();

  error_message += validateDoB();

  error_message += validateGender();

  error_message += validateEmail();

  error_message += validateAddress();

  error_message += validateMembership();

  error_message += validateDuration();

  if (error_message != "") {
    alert("Some fields have invalid entry:\n" + error_message);
    event.preventDefault();
  }
}

// Validation of First Name
function validateFirstName() {
  var error = "";
  var nonletters = /[^a-zA-Z]+/;

  if (document.forms["registration"]["firstname"].value.length == 0) // condition is checked if field is left blank
  {
    registration.firstname.focus();
    error = "First name is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["firstname"].value.match(nonletters)) // condition is checked if field is alphabetical characters only
  {
    registration.firstname.focus();
    registration.firstname.select();
    error = "Alphabetical characters only for first name \n"; // error message is displayed if field is not alphabetical characters only
  }

  return error;
}

// Validation of Last Name
function validateLastName() {
  var error = "";
  var nonletters = /[^a-zA-Z]+/;

  if (document.forms["registration"]["lastname"].value.length == 0) // condition is checked if field is left blank
  {
    registration.lastname.focus();
    error = "Last name is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["lastname"].value.match(nonletters)) // condition is checked if field is alphabetical characters only
  {
    registration.lastname.focus();
    registration.lastname.select();
    error = "Alphabetical characters only for last name \n"; // error message is displayed if field is not alphabetical characters only
  }

  return error;
}

// Validation of User Name
function validateUserName() {
  var error = "";
  var nonalphanum = /[^0-9a-zA-Z]+/;

  if (document.forms["registration"]["username"].value.length == 0) // condition is checked if field is left blank
  {
    registration.username.focus();
    error = "User name is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["username"].value.match(nonalphanum)) // condition is checked if field is alpha-numeric characters only
  {
    registration.username.focus();
    registration.username.select();
    error = "Alpha-numeric characters only for user name \n"; // error message is displayed if field is not alpha-numeric characters only
  }

  return error;
}

// Validation of Password
function validatePassword() {
  var error = "";
  var nonalphanum = /[^0-9a-zA-Z]+/;
  var numbers = /(?=(.*\d){2})/;

  if (document.forms["registration"]["password"].value.length == 0) // condition is checked if field is left blank
  {
    registration.password.focus();
    error = "Password is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["password"].value.length != 8) // condition is checked if password is not eight characters
  {
    registration.password.focus();
    registration.password.select();
    error = "Password of 8 characters is required \n"; // error message is displayed if password is not eight characters
  } else if (document.forms["registration"]["password"].value.match(nonalphanum)) // condition is checked if field is alpha-numeric characters only
  {
    registration.password.focus();
    registration.password.select();
    error = "Alpha-numeric characters only for password \n"; // error message is displayed if field is not alpha-numeric characters only
  } else if (!(document.forms["registration"]["password"].value.match(numbers))) // condition is checked if field has at least two numbers
  {
    registration.password.focus();
    registration.password.select();
    error = "Password must contain at least 2 numbers \n"; // error message is displayed if field does not have at least two numbers
  }

  return error;
}

// Validation of Date of Birth
function validateDoB() {
  var error = "";
  var dob = document.forms["registration"]["dob"].value;
  var validdob = /\d{2}\/\d{2}\/\d{4}/;

  if (dob.length == 0) // condition is checked if field is left blank
  {
    error = ""; // no error message is displayed if field is blank
  } else if (!(dob.match(validdob))) // condition is checked if field is in correct format
  {
    registration.dob.focus();
    registration.dob.select();
    error = "Please enter date of birth in valid format \n"; // error message is displayed if field is in incorrect format
  }

  return error;
}

// Validation of Gender
function validateGender() {
  var error = "";

  if (document.forms["registration"]["gender"].value.unchecked) // condition is checked if field is left blank
  {
    error = ""; // no error message is displayed if field is blank
  }

  return error;
}


// Validation of Email Address and format validity
function validateEmail() {
  var error = "";
  var email = document.forms["registration"]["email"].value;
  var emailformat = /\w+([\.-]?\w{1})*@\w{1}([\.-]?\w+)*(\.\w{1})+/

  if (email.length == 0) // condition is checked if field is left blank
  {
    registration.email.focus();
    error = "Email address is required \n"; // error message is displayed if field is blank
  } else if (!(email.match(emailformat))) // condition is checked if field is in correct format
  {
    registration.email.focus();
    registration.email.select();
    error = "Please enter a valid email address \n"; // error message is displayed if invalid email address entered
  }

  return error;
}

// Validation of Address
function validateAddress() {
  var error = "";
  var nonalphanum = /[^0-9a-zA-Z]+/;

  if (document.forms["registration"]["address"].value.length == 0) // condition is checked if field is left blank
  {
    registration.address.focus();
    error = "An address is required \n"; // error message is displayed if field is blank
  } else if (document.forms["registration"]["address"].value.match(nonalphanum)) // condition is checked if field is alpha-numeric characters only
  {
    registration.address.focus();
    registration.address.select();
    error = "Alpha-numeric characters only for address \n"; // error message is displayed if field is not alpha-numeric characters only
  }

  return error;
}

// Validation of Membership Type
function validateMembership() {
  var error = "";

  if (document.forms["registration"]["membership"].value == "default") // condition is checked if field is left as default
  {
    registration.membership.focus();
    error = "Membership type must be selected \n"; // error message is displayed if field is not selected
  }

  return error;
}

// Validation of Membership Duration
function validateDuration() {
  var error = "";

  if (document.forms["registration"]["duration"].value == "default") // condition is checked if field is left as default
  {
    registration.duration.focus();
    error = "Membership duration must be selected \n"; // error message is displayed if field is not selected
  }

  return error;
}

关于Javascript 表单验证 - 遗漏了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867407/

相关文章:

javascript - grunt 将散列附加到 dist/files

javascript - 使用 javascript 的时间敏感的 css 样式表切换

javascript - Bootstrap 3 固定顶部导航栏

javascript - onClick 在非内联 JavaScript 中不起作用

HTML Tidy、Web 编辑器所见即所得和 html 片段

javascript - jquery 循环 - 添加然后删除 css 类 - 无限循环

c# - Javascript float 与 C# float 相比

javascript - 基于 jQuery 和 Bootstrap 中的 radio 选择扩展表单

javascript - 我如何控制要使用 javascript 打印的页数?

javascript - 需要关于让我的代码工作的建议(将 javascript 函数链接到 html 元素)