JavaScript多输入验证

时间:2018-07-17 13:18:39

标签: javascript html

我正在尝试验证“姓氏”必填字段,并且NIC应该仅在数字中。但是问题是此代码未检查NIC。

<script>
  function validateform(SnameAddress,mail,NIC,dob){
    var required=""
    if(document.getElementById("Sname").value == ""){
      alert("Surname : field is required");
      return false;
    }
  }

  function validateNIC(NIC){
    var nic=document.getElementById("NIC").value;
    if(isNaN(nic)){
      alert("NIC : incorrect NIC num"); 
      return false;
    }
  }

</script>

<form action="MAILTO:info@example.com" method="post" enctype="text/plain" action="#"
onsubmit="return (validateform() && validateNIC())">

  Surname <input type="text" id="Sname" >
  NIC <input type="text" id="NIC">
</form>

4 个答案:

答案 0 :(得分:2)

在您的代码中,如果不从函数返回true,则其默认返回值是undefined,它等于true。这就是为什么您的支票无法使用的原因。如果您不想发送表格,则两种情况都应返回false。 我可以假设您没有很好地检查isNaN函数。例如:

isNaN("123.0")
false
isNaN("123,0")
true

因此,请尝试通过开发人员控制台(f12)使用isNaN内置功能来检查可能的输入。也许您需要在现有代码之上编写一些逻辑。

答案 1 :(得分:2)

逻辑与运算“ &&”采用短路行为,这意味着如果第一个条件未返回true,则不会检查第二个条件。 所以我们这里有两个条件:

  • validateform()如果Sname.value等于“”,则返回false,然后AND操作将不检查第二条件,并且不会进入validateNIC()函数。
  • 如果validateform()不等于“”,
  • Sname.value不会返回true,那么AND操作也不会检查第二段条件

因此,您可以在return ture;的末尾添加validateform(),但这将使您仅在validateNIC()不等于“”“时输入Sname.value

如果要同时检查两者,可以将所有验证都放在相同的函数中:

<script>
  function validateform() {
    var isValid = true;
    if (document.getElementById("Sname").value == "") {
      alert("Surname : field is required");
      isValid = false;
    }
    var nic = document.getElementById("NIC").value;
    if (isNaN(nic)) {
      alert("NIC : incorrect NIC num");
      isValid = false;
    }
    return isValid;
  }
</script>
<form action="MAILTO:info@example.com" method="post" enctype="text/plain" action="#" onsubmit="return validateform()">
  Surname
  <input type="text" id="Sname"> NIC
  <input type="text" id="NIC">
</form>

答案 2 :(得分:1)

我想是因为您在validateform上没有返回true才有效。因此,在“与”(&&)条件中,当第一部分不为真时,没有理由检查条件的第二部分,因此不会调用validateNIC。

答案 3 :(得分:1)

第1步:如果您在函数中未使用参数,则只需删除它即可。 function validateform(SnameAddress,mail,NIC,dob)-> function validateform()

function validateNIC(NIC)-> function validateNIC()

第2步:添加return true(如@Dmitry Surin所述)

function validateform(){
   var required=""
   if(document.getElementById("Sname").value == ""){
       console.log("Surname : field is required");
       return false;
   } else {
       return true;
   }
}

function validateNIC(){
   var nic=document.getElementById("NIC").value;
   if(isNaN(nic)){
      console.log("NIC : incorrect NIC num"); 
      return false;
    } else {
        return true;
    }
}

JSFiddle:https://jsfiddle.net/xpvt214o/431790/