我需要验证一个输入文本元素的数组(里程数)。例如:
<tbody>
<c:forEach items="${list}" var="item">
<tr>
<!--some other columns--->
<td align="left"><input type="text" name="mileage" value="" /></td>
</tr>
</c:forEach>
</tbody>
验证的脚本如下
$(document).ready(function(){
$("#form1").validate({
rules: {
mileage: {
required: true
}
},
submitHandler: function(form) {
form.submit();
}
});
});
现在的问题是,.validate.js只验证里程的第一个元素。我可以做什么?我怎样才能使插件验证所有的输入文本?
希望你能帮助我。
在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();
}
基于 漩涡 答案,这个函数也会把 ignore
设置。
checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
var checkingElements = this.findByName( elements[i].name ).not(this.settings.ignore);
if (checkingElements.length !== undefined && checkingElements.length > 1) {
for (var cnt = 0; cnt < checkingElements.length; cnt++) {
this.check( checkingElements[cnt] );
}
} else {
this.check( elements[i] );
}
}
return this.valid();
},
使用jquery validate 1.19.1,修改jquery.validate.js文件第465行,替换成这个函数应该就可以了。
checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
var checkingElements = this.findByName( elements[i].name ).not(this.settings.ignore);
if (checkingElements.length !== undefined && checkingElements.length > 1) {
for (var cnt = 0; cnt < checkingElements.length; cnt++) {
this.check( checkingElements[cnt] );
}
} else {
this.check( elements[i] );
}
}
return this.valid();
},
希望对大家有所帮助;)