【发布时间】:2010-08-06 06:51:30
【问题描述】:
我正在使用 jQuery 进行一些简单的客户端验证。
var passedValidation = new Boolean(true);
// Required Field Validators.
if ($('#fbsignup input.firstName').val().trim() == '') {
$('#fbsignup tr.firstName em').show();
passedValidation = false;
}
if ($('#fbsignup input.lastName').val().trim() == '') {
$('#fbsignup tr.lastName em').show();
passedValidation = false;
}
if ($('#fbsignup input.email').val().trim() == '') {
$('#fbsignup tr.email em').show();
passedValidation = false;
}
if ($('#fbsignup input.password').val().trim() == '') {
$('#fbsignup tr.password em').show();
passedValidation = false;
}
if ($('#fbsignup input.screenName').val().trim() == '') {
$('#fbsignup tr.screenName em').show();
passedValidation = false;
}
if (passedValidation == true) {
// All validation passed. Hide the modal signup dialog and post back to signup user.
$('#fbcSignupModal').jqmHide();
return true;
} else {
return false;
}
基本上,我想确保所有字段都已填写。如果没有,则返回 false,否则返回 true。很简单。
这可以重构为一行吗? (也许通过对所有元素应用一个类?)。
关于答案的警告,我不想使用 jquery-validate 插件。我知道它很棒,但这并不是很难验证,我不想影响表单的其余部分(这是一个模式弹出窗口)。
那么,话虽这么说 - 有什么想法吗?
编辑
澄清一下,我确实需要知道哪个字段不需要填写,所以我可以在它旁边显示一个 *。
EDIT2
更新了原始代码以表明我需要显示必填字段标签,如果验证失败则返回 false。
EDIT3
好的,我已经重新考虑了我的解决方案,看起来我需要进行服务器调用以根据会员模式验证电子邮件。因此,我可能最终要么将字段包装在更新面板中,要么进行 Web 服务发布(并在 json 数组中返回错误)。不过,我会暂时搁置这个问题,然后选择得票最多的答案。
回答
所以我选择了@box9 答案的修改版本。我仍然需要对服务器进行 AJAX 调用以验证电子邮件(正如我上面的编辑所建议的那样),但这将确保我只有在填写所有字段时才这样做。
$('#fbsignup input.required').each(function (index) {
if ($(this).val().trim() == '') {
$(this).next('em').show();
passedValidation = false;
}
});
我在必需的输入字段后面直接有一个 em 元素,所以我可以轻松使用.next([selector]) jQuery 选择器。
简单又好用。
感谢大家的回答。
【问题讨论】:
-
重新编辑:这与“如果不是,则返回 false,否则返回 true。简单。”相矛盾。你需要彻底重新思考逻辑,当你的功能不完整时不要过多考虑优化代码长度。
-
@David - 授予。我将“编辑”我的“编辑”
-
JavaScript 不是 Java:
var passedValidation = new Boolean(true);并不比var passedValidation = true;好。事实上,这很危险——if (new Boolean(false)) return true;将返回 true。 -
@Casey Hope - 同意。虽然我不是这样用的,所以没关系。
标签: javascript jquery html validation