Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/HTML表单验证问题_Javascript_Html - Fatal编程技术网

Javascript/HTML表单验证问题

Javascript/HTML表单验证问题,javascript,html,Javascript,Html,我目前对我的表单如何验证存在问题。为了简单起见,我现在只验证名字和姓氏 假设一个人没有输入他们的名字或姓氏。它只显示错误消息“(请输入您的名字)”而不显示“(请输入您的姓氏)” 假设一个人输入自己的名字而不是姓氏,然后显示“(请输入您的姓氏)” 有没有办法解决这个问题,例如,如果有人没有输入他们的名字和姓氏,它会显示两条错误消息 JavaScript: function validateAll() { //Inputs var firstName = document.getEl

我目前对我的表单如何验证存在问题。为了简单起见,我现在只验证名字和姓氏

假设一个人没有输入他们的名字或姓氏。它只显示错误消息“(请输入您的名字)”而不显示“(请输入您的姓氏)”

假设一个人输入自己的名字而不是姓氏,然后显示“(请输入您的姓氏)”

有没有办法解决这个问题,例如,如果有人没有输入他们的名字和姓氏,它会显示两条错误消息

JavaScript:

function validateAll() {
    //Inputs
    var firstName = document.getElementById("firstName").value; 
    var lastName = document.getElementById("lastName").value;   

    //Errors
    var firstNameError = document.getElementById("firstNameError");
    var lastNameError = document.getElementById("lastNameError");

    if (
        validateFirstName(firstName, firstNameError) == true &&
        validateLastName(lastName, lastNameError) == true
        ) {
        return true;     
    } else return false;
}   

function validateFirstName(firstName, firstNameError) {
    if (firstName == "") {
        firstNameError.firstChild.nodeValue = "(Please Enter Your First Name)";
        return false;
    } else {
        firstNameError.firstChild.nodeValue = "";
        return true;
    }
}

function validateLastName(lastName, lastNameError) {
    if (lastName == "") {
        lastNameError.firstChild.nodeValue = "(Please Enter Your Last Name)";
        return false;
    } else {
        lastNameError.firstChild.nodeValue = "";
        return true;
    }    
}
HTML:


名字
*
第二个名字
*
电话号码
*
电子邮件
*
确认电子邮件
*
密码
*
登记

所以您使用的是逻辑AND语句,我的反对票是因为我使用的逻辑OR语句更接近,但不完全正确。这是小型讲座

逻辑AND表达式将执行语句的每一部分,直到遇到第一个false,此时整个表达式将变为false,AND表达式将退出。另一方面,逻辑OR语句将执行语句的每一部分,不管是真是假,然后计算表达式的最终布尔值。因此,使用AND时,表达式将以第一个false停止。有两种处理方法

首先,您可以按照建议执行,将每个验证函数求值为一个变量,然后在and语句中使用所有这些函数。这样做可以确保所有表单字段都已验证。然后AND语句可以简单地确定表单是否有效

var firstNameIsValid = validateFirstName(firstName, firstNameError),
    lastNameIsValid  = validateLastName(lastName, lastNameError);

if (firstNameIsValid && lastNameIsValid){
  // Form is valid, proceed with processing
} else {
  // Form is invalid because SOMETHING above was false. Do some other
  //  error handling.
}
第二,我所使用的方法(但与正确的回答不太接近)将其组合成一个OR语句,但我们不是检查字段是否有效,而是检查它们是否无效

if (!validateFirstName(firstName, firstNameError) || !validateLastName(lastName, lastNameError) ) {
  // The above query is checking whether validate<fieldName> returned FALSE 
  //   for every field. If any validate returns false, the entire form is
  //   invalid. Do any invalid form processing.
} else {
  // The ELSE of the above if would only pass if every form field checked has
  //   in fact, passed the validity check. At this point, the form itself is
  //   valid and any processing for valid forms can happen.
}
如果(!validateFirstName(firstName,firstNameError)| |!validateLastName(lastName,lastNameError)){
//上面的查询正在检查validate是否返回FALSE
//对于每个字段。如果任何validate返回false,则整个表单为
//无效。请执行任何无效的表单处理。
}否则{
//仅当选中了每个表单字段时,上述if的ELSE才会通过
//事实上,通过了有效性检查。此时,表单本身
//有效,并且可以对有效表单进行任何处理。
}
现在,说了这么多,你正在为自己制造一个丑陋的沼泽。此时,您只需要一个有效的名字和姓氏。但是如果它们包含一个数字呢?如果你想要一个只有数字的字段呢?如果您希望字段既是必填字段又是电话号码,该怎么办?您必须为每个案例重新创建轮子。相反,创建一个可以通用的函数来处理每种情况如何?如果遇到没有处理程序的情况,可以创建该情况并将其添加到通用函数中,使其可供以后的任何其他表单元素使用

var formEl=document.getElementById(“我的自定义表单”);
formEl.querySelector(“按钮”).addEventListener(“单击”),函数(evt){
evt.stopPropagation();
evt.preventDefault();
var isFormValid=[];
var validateThese=[{
fieldEl:formEl.querySelector(“[name=firstName]”),
errorEl:formEl.querySelector(#firstNameError”),
检查:[“必需”、“alpha”]
}, {
fieldEl:formEl.querySelector(“[name=lastName]”),
errorEl:formEl.querySelector(#lastNameError”),
检查:[“必需”、“alpha”]
}, {
fieldEl:formEl.querySelector(“[name=phoneNumber]”),
errorEl:formEl.querySelector(“#phoneNumberError”),
检查:[“数字”]
}];
for(var i=0,len=validateThese.length;i字段是必需的!”;
}
打破
案例“alpha”:
isValid[i]=isAlpha(选中this.fieldEl);
如果(!isValid[i]){
选中this.errorEl.innerHTML+=“
字段只能是字母字符!”; } 打破 大小写“数字”: isValid[i]=isNumeric(选中this.fieldEl); 如果(!isValid[i]){ 选中this.errorEl.innerHTML+=“
字段只能是数字字符!”; } 打破 大小写“字母数字”: isValid[i]=isAlphanumeric(选中this.fieldEl); 如果(!isValid[i]){ 选中this.errorEl.innerHTML+=“
字段只能是字母数字!”; } 打破 }//结束开关 }//结束 if(isValid.indexOf(false)=-1){ //isValid不包含假值,此字段正常。 返回true; }否则{ //isValid至少包含一个false。至少一个测试失败。 //场地不好。 返回fals
if (!validateFirstName(firstName, firstNameError) || !validateLastName(lastName, lastNameError) ) {
  // The above query is checking whether validate<fieldName> returned FALSE 
  //   for every field. If any validate returns false, the entire form is
  //   invalid. Do any invalid form processing.
} else {
  // The ELSE of the above if would only pass if every form field checked has
  //   in fact, passed the validity check. At this point, the form itself is
  //   valid and any processing for valid forms can happen.
}
validateFirstName(firstName, firstNameError) == true &&
validateLastName(lastName, lastNameError) == true