我正在使用jQuery的验证插件,并希望验证许多动态添加的文本字段,以便根据单独的总字段检查其总和.
过去我已经编写了自己的验证方法,但是只有简单的方法可以使用基本的正则表达式结构,这些结构很容易从additional-methods.js文件中重现.
具体来说,jQuery网站提供了一个使用addMethod() function做一个非常相似的例子:
jQuery.validator.addMethod("math",function(value,element,params) { return this.optional(element) || value == params[0] + params[1]; },jQuery.format("Please enter the correct value for {0} + {1}"));
params参数的实现或多或少缺乏记录.我能够找到如何在a seperate stackoverflow thread将内容传递给参数.但是,在该示例中传入params的数组是静态的.我需要传递给params的数组根据在“运行时”上添加的动态添加行增长和收缩…
我已经上传了一个完全删除的版本onto jsfiddle供您观看.
请注意,代码中嵌入了一些我有疑问的意见,而且我删除了Remove功能,因为它只是增加了混乱,并没有帮助说明这一点.
解决方法
这是我的验证器版本.
http://jsfiddle.net/linkabi9/shBxv/
你会注意到,而不是参数的静态数字,我传递一个选择器.数组中的一个元素是存款字段的选择器.我给每一个现有的和新的存款输入一个类“setamount1”,你可以使用任何你想要的类.您将此验证器设置的字段将为“总金额”字段.
我还向存款字段添加了一个现场“变更”事件.这将对每个变化运行验证.我必须警告你,这样做整个形式的验证不仅仅是存款和总领域.
现在您可以在同一个表单/页面中重复使用此验证器类型多次!
我去了下面的验证器代码.另外,验证器初始化的一个例子.
jQuery.validator.addMethod("depositsSum",params) { var amnts = 0; $(params[0]).each(function() { amnts += parseFloat($(this).val()); }); return this.optional(element) || amnts == parseFloat(value); },jQuery.format("Individual deposits must add up to the total!")); $("#depositForm").validate({ rules: { fullAmount: { depositsSum: [".amountset1"] } } });