假设我有两个表单,firstName和lastName。
我有一个alphanumericvalidation方法,我单独测试。
function alphaNumericValidation(Name)
{
if(/[^a-zA-Z0-9]/.test(firstName.value) || firstName.value == "")
{
Name.style.border = "1px solid red";
Name.focus();
return false;
}
return true;
}
现在,我有一个代码提交的验证方法:
<td><input type="submit" name="smbt" id="smbt" value="Next" class="nextBtn" onclick="return validation();"/></td>
验证方法写为
function validation()
{
var firstName = document.getElementById("firstName");
var lastName = document.getElementById("lastName");
if (alphaNumericValidation(firstName))
{
if (alphaNumericValidation(lastName))
{
return true;
}
}
else
return false;
然而逻辑是错误的并且不能按预期工作。我做错了什么?
答案 0 :(得分:1)
试试这个:
function alphaNumericValidation(Name) {
if(/[^a-zA-Z0-9]/.test(Name.value) || Name.value == "") {
Name.style.border = "1px solid red";
Name.focus();
return false;
}
return true;
}
您正在firstName
内alphaNumericValidation
进行测试,它应该是Name
,因为您将firstName
(或lastName
)作为{{{}传递1}}参数Name
。
修改强>
如果只有alphaNumericValidation
有效且validation()
无效,则firstName
函数不会返回任何内容。
lastName
请改为尝试:
function validation() {
var firstName = document.getElementById("firstName");
var lastName = document.getElementById("lastName");
if (alphaNumericValidation(firstName)) {
if (alphaNumericValidation(lastName)) {
return true;
}
// <-- When it gets to here, nothing is returned.. you could add `return false;` here to fix it.
}
else
return false;
修改2
你可以继续将if语句放在if语句中,只要你确保函数总是返回一些东西就可以正常工作。
在你的情况下,我可能会写这样的东西:
if (alphaNumericValidation(firstName) && alphaNumericValidation(lastName)) {
return true;
}
else
return false;
这将继续运行您的验证,直到其中一个返回function validation() {
var firstName = document.getElementById("firstName");
var lastName = document.getElementById("lastName");
var valid = true;
valid = valid ? alphaNumericValidation(firstName) : false;
valid = valid ? alphaNumericValidation(lastName) : false;
return valid;
}
,之后它会跳过那些,false
将返回validation()
。