在JavaScript中进行验证时,如何保持需要处理一系列意外事件的验证方法变得不守规矩?
例如,我有一个表单,其中包含一个具有检查功能的字段:
等
目前,我有一个带有一堆if / else语句的方法。
我可以将每个签出分解为它自己的方法并从主验证方法中调用它,但这会产生大量新方法。
更新:无论我是使用框架还是单个方法,我是否仍然拒绝让调用验证方法填充If / Else或Switch语句以及失败验证的警告框?
答案 0 :(得分:3)
为什么重新发明轮子?我会建议jQuery Validation Plugin。查看demo pages以及
答案 1 :(得分:1)
听起来你可能想要一个基本的状态机。您可以考虑的一件事是将验证器分解为最简单的形式:
function validator(op, options, pass, fail) {
if (op(options)) {
pass(options);
} else {
fail(options);
}
}
然后,您可以将它们链接在一起,形成更复杂的系统。
function isFooChecked(options) {
return $(options.foo).is(':checked');
}
function sayHi(options) {
alert('hi ' + options.name);
}
function fail(options) {
alert(options.name + ' was bad');
}
function validateName() {
validator(isFooChecked, { foo: '#someField', name: $('#nameField').val() }, sayHi, fail);
}
你仍然会有很多代码,但如果你做得对,那么功能应该很小而且易于理解。
答案 2 :(得分:0)
我建议将每个单独的签出拆分为自己的方法,并将要验证的控件作为参数传入。这样你就可以很容易地重用常见的(“新值是一个数字吗?”)。
我不知道在JavaScript中使用大量方法有任何缺点(除了命名空间拥挤),但我可能会遗漏那些东西。
当然,您可能还想考虑使用framework of some kind。
答案 3 :(得分:0)
我有一个看起来像
的Json对象{'field1': {'rule_name1':{'rule': rule1, 'message': message1},
{'rule_name2':{'rule': rule2, 'message': message2}},
field2: {'rule_name3':{'rule': rule3, 'message': message3},
{'rule_name4':{'rule': rule1, 'message': message1}},
{'rule_name5':{'rule': rule4, 'message': message4}}}
或者,如果您发现它更具可读性
field1
rule_name1
rule: rule1
message: message1
rule_name2
rule: rule2
message: message2
field2
rule_name3
rule: rule3
message: message3
rule_name4
rule: rule1
message: message1
rule_name5
rule: rule4
message: message4
基本上,您有一个字段列表。在每个字段下,您可以找到一系列规则,这些规则的名称无关紧要,对于每个rule_name,您都有一条规则和一条消息。
每次我需要检查字段时,都会找到相应的子对象。然后我遍历rule_names,对于rule_name,我得到一条规则和一条消息。该规则对应于检查字段的方法(例如“notEmpty()”)。所以我调用方法:如果它返回true,我将迭代带到下一个rule_name。否则我会返回消息。
然后我可以在视图方法中使用我想要的消息。