使用jqueryvalidation插件validation数组输入
我有以下表格。 我试图使用jqueryvalidation插件validation输入。 我尝试过一些代码,但它不起作用。 当我点击提交按钮时,它就会转到表单的动作。
你能告诉我如何使用jqueryvalidation插件validation上面的表单吗?
谢谢 :)
我的Jquery代码:
<script type="text/javascript" src="support/datepicker/js/jquery-1.7.2.min.js"> <script type="text/javascript" src="support/js/jquery.validate.js"> $(document).ready(function() { // validate signup form on keyup and submit var validator = $("#voucherform").validate({ showErrors: function(errorMap, errorList) { $(".errormsg").html($.map(errorList, function (el) { return el.message; }).join(", ")); }, wrapper: "span", rules: { reg_number[]: { required: true, minlength: 2, remote: { url: 'sales/invoice_check', async: false, type: 'post' }, } }, messages: { reg_number[]: { required: "Enter Reg Number", minlength: jQuery.format("Enter at least {0} characters"), remote: jQuery.format("{0} is already in use") }, } }); });
你有两个问题:
-
您没有正确选择
form
元素。您正在寻找一个
id
“voucherform”的form
,而您的标记不包含一个form
。 您可能希望将选择器更改为:$("form[name='voucherform']").validate({ ... });
-
括号(
[]
)在JavaScript标识符中无效。 这意味着您的脚本未正确解析。 要解决此问题,只需将带括号的字段用引号括起来,即'reg_number[]'
而不是reg_number[]
。
调整validation码:
var validator = $("form[name='voucherform']").validate({ showErrors: function(errorMap, errorList) { $(".errormsg").html($.map(errorList, function(el) { return el.message; }).join(", ")); }, wrapper: "span", rules: { 'reg_number[]': { required: true, minlength: 2, remote: { url: 'sales/invoice_check', async: false, type: 'post' } } }, messages: { 'reg_number[]': { required: "Enter Reg Number", minlength: jQuery.format("Enter at least {0} characters"), remote: jQuery.format("{0} is already in use") } } });
示例: http : //jsfiddle.net/hfrhs/
我在这里找到了最好的答案https://stackoverflow.com/a/17643385/146553
如果你的元素名称有索引,则将它们视为唯一名称req_number [0] req_number [1]等….
你可以在这里找到一个好的答案: jquery-validation-for-array-of-input-elements 。 在jquery.validate.js中,我们可以找到一个名为checkForm的函数,我们必须修改它如下:
checkForm: function() { this.prepareForm(); for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) { for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) { this.check( this.findByName( elements[i].name )[cnt] ); } } else { this.check( elements[i] ); } } return this.valid(); }
这是我的方式
'reg_number[]':{ required:function(){ return $("input[name='reg_number[]']").filter(function(){ return $.trim($(this).val()).length>0 }).length==0 } }
希望它对你没什么帮助。
只需共享一个方法来validation带索引的复选框,并且只有其中一个是必需的。
Jqueryvalidation:
$.validator.addMethod("onechecked", function (value, elem, param) { if ($(".siblingcheckbox:checkbox:checked").length > 0) { return true; } else { return false; } }, "You must select at least one!"); $.validator.addClassRules("siblingcheckbox", { onechecked: true });