我正在尝试验证“姓氏”必填字段,并且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>
答案 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;
}
}