我正在使用jQuery Validation Plugin,v1.11.0,2 / 4/2013和jquery.validate.unobtrusive.js。
我想我面临数字字段范围验证的错误:验证将字符串值与最小字符串和最大字符串进行比较,而不是将字段数与最小数字和最大数字进行比较。
摄制步骤:
您使用以下HTML设置验证范围1-1000:
<input name="Data.MaxConcurrentInstances" class="text-box single-line" id="Data_MaxConcurrentInstances" type="number" value="" data-val-number="The field Max concurrent instances must be a number." data-val="true" data-val-range-min="1" data-val-range-max="1000" data-val-range="The field Max concurrent instances must be between 1 and 1000.">
您设置测试字段值:7。
预期成绩
到目前为止,我发现最好的解决方法是运行修补启动脚本:
$(document).ready(function() {
window.setTimeout(function () {
//Fixing jquery Unobtrusive validation range integer bug
var allRules = $.data(document.forms[0], "validator").settings.rules;
for (var ruleName in allRules) {
var rule = allRules[ruleName];
if (rule.range != undefined && rule.number)
for (var ri = rule.range.length-1; ri >=0 ; ri--) {
rule.range[ri] = Number(rule.range[ri]);
}
}
}, 100);
});
其中一个解决方法是覆盖jquery验证器的range方法,如下所示:
$.validator.methods.range = function (value, element, param) {
return this.optional(element) || (Number(value) >= Number(param[0]) && Number(value) <= Number(param[1]));
}
验证器插件中范围的实际代码是
range : function (value, element, param) {
return this.optional(element) || (value >= param[0] && value <= param[1]);
}
在转换中的String类型值 value, param[0] and param[1]
到数字类型使用 Number(value), Number(param[0]) and Number(param[1])
在Number之间进行适当的比较,而不是在String之间进行。