2017-10-12 42 views
0

我所有的if语句都是独立运行的,但是当我把它们全部放在函数中时,我无法让它们全部工作。带有多个if语句的Javascript函数不起作用

function validate() 
{ 
    var x = document.forms["myForm"]["patientName"].value; 
    var y = document.forms["myForm"]["patientId"].value; 
    var z = document.forms["myForm"]["patientEmail"].value; 
    var yL = y.toString().length; 
    var search1 = z.search("@"); 
    var search2 = z.search("."); 
    if (myForm.emailReceipt.checked == true) { 
    if (x == "" || y == "" || Z == ""){ 
      alert("Name, ID, and Email must be filled out"); 
     }else if (search1 == -1 || search2 == -1){ 
      alert("Please submit a valid email address"); 
     } 
    if ((myForm.emailReceipt.checked == false) && (x == "" || y == "")) { 
     alert("Name and ID must be filled out"); 
    } 
    if (yL !== 8){ 
     alert("ID must be 8 digits long"); 
    } 
} 
+1

'ž==“”'应该是'ž==“”' (小写)。 – llama

+0

目前还不清楚if(myForm.emailReceipt.checked == true){'应该立即返回还是不返回,因为它没有关闭。如果该条件应该关闭所有其他条件,那么'if((myForm.emailReceipt.checked == false)&& ....'将永远不会工作 – hayavuk

+0

我也认为这个验证器不必要地一次验证太多的东西。那么,你会遇到'z'的'x','y','z'为空的测试,然后稍后测试'x'或'y'为空,这是多余的。将验证器分成三个字段,然后编写一个验证器来组成它们。 – hayavuk

回答

0

您应该以干净,格式化的方式编写代码,或者使用可以为您做的IDE。如果你这样做,你会意识到你有语法错误,因为缺少花括号。

另外,在第二种情况下将大写字母Z更改为小写字母z。

最后,一定要检查你的条件逻辑。例如,你的外部if条件检查是否myForm.emailReceipt.checked == true,但是内部条件检查是否myForm.emailReceipt.checked == false,它永远不会通过。这可能是为什么这些条件是单独工作,但不是在一起。逐步浏览你的逻辑,只添加必要的内容。

这里是你的代码的无错版,但仍需要你通过你的逻辑走,并相应修正:

function validate() { 
    var x = document.forms["myForm"]["patientName"].value; 
    var y = document.forms["myForm"]["patientId"].value; 
    var z = document.forms["myForm"]["patientEmail"].value; 
    var yL = y.toString().length; 
    var search1 = z.search("@"); 
    var search2 = z.search("."); 

    if (myForm.emailReceipt.checked == true) { 
     if (x == "" || y == "" || z == "") { 
      alert("Name, ID, and Email must be filled out"); 
     } else if (search1 == -1 || search2 == -1) { 
      alert("Please submit a valid email address"); 
     } 

     if ((myForm.emailReceipt.checked == false) && (x == "" || y == "")) { 
      alert("Name and ID must be filled out"); 
     } 

     if (yL !== 8) { 
      alert("ID must be 8 digits long"); 
     } 
    } 
} 
+0

嗨,你的回答包含原始错误,尽管格式更好。 – Fenton

+0

另外'Z'应该是'z' – Lixus

+0

'Z'更改为'z'。那个缺少大括号的东西应该可以解决所有错误。 – Lansana