【发布时间】:2011-12-13 02:43:42
【问题描述】:
当我决定使用经典的 javascript 构建普通的 web 表单验证时,我遇到了奇怪的错误。输入文本字段有几个“onblur”处理程序和一个“表单提交”处理程序。
当我这样使用它们时:
function loginCheck() {
... return true of false
}
function passwordCheck() {
...
}
function formValidation() {
return loginCheck() && passwordCheck();
}
它不像我预期的那样工作:如果 loginCheck 失败,则永远不会调用“passwordCheck”!
终于有办法了
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok;
}
现在执行密码检查。但是当我选择时:
function formValidation() {
ok = loginCheck();
ok = ok && passwordCheck();
return ok;
}
如果 loginCheck 失败,则永远不会再次调用 passwordCheck。
此外:loginCheck & passwordCheck 返回布尔值,但 &= 运算符将其转换为“0”或“1”。 “0”不适用于我的 onsubmit="return checkForm" 处理程序。我必须再次将我的 &= 结果转换为布尔值:
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok != 0;
}
这是 javascript 引擎的正常行为吗?
【问题讨论】:
-
&是按位与并且总是返回一个数字。&&是逻辑与,将返回决定总体结果的表达式的值。将任何值转换为其等效布尔值的捷径是使用双重否定!!。 -
能以某种方式改变可怕的标题吗?我想不出什么清晰且仍然有吸引力的东西。
-
如果在登录检查失败后需要进行密码检查,则需要进行一些重构。
标签: javascript