【发布时间】:2012-03-27 00:01:33
【问题描述】:
我正在使用 jQuery 验证插件。我正在尝试使用 .percent 类计算所有输入字段的总和。如果 .percent 字段的总和不等于 100%,则抛出验证错误。
百分比行是动态网格的一部分,数量非常多。您将在下面看到我一直在处理的示例。我发现 addMethod 是为每个 input.percent 而不是一次调用的。我还想说它在 submit 被调用之前被调用。
代码。
html
<div class="row">
<input value="" class="percent"/>
</div>
<div class="row">
<input value="" class="percent"/>
</div>
js
$.validator.addClassRules({
percent: {percent:true}
});
$.validator.addMethod("percent",
function cals(value, element) {
// all the fields that start with 'coeff'
var percent = element;
var total = 0;
for (var i = 0; i < percent.length; i++) {
total += Number(percent[i].value);
}
return total == 100;
}, $.format("Percentage fields most total up to 100%"));
$("form").validate({
});
更新
我尝试了以下代码并取得了一定的成功
$("#modify-funding .percent").rules('add', {sum: 100});
$.validator.addMethod("sum", function (value, element, params) {
var sumOfVals = 0;
$("#modify-funding .percent").each(function () {
sumOfVals = sumOfVals + parseInt($(this).val().length ? $(this).val() : 0);
});
if (sumOfVals == params) return true;
return false;
},
$.format("Percentage fields most total up to 100%")
);
将类传递给规则时,它只传递一个元素,这使我无法查询额外的百分比字段。另一个问题是它只将错误类添加到第一个 .percent 元素,一旦满足 100% 标准,其他元素将不会释放错误。
更新 2
这是我获得百分比验证最接近的工作。这不是非常有效的代码,因为每次循环规则时它都需要遍历所有百分比字段。该代码仍然在提交操作发生之前进行验证,并且当百分比已被纠正为等于 100 时,不会清除 keyup 上的所有百分比错误。
$("#modify-funding .percent").each(function() {
$(this).rules('add', {sum: [".percent"]});
})
$.validator.addMethod("sum", function (value, element, params) {
var sumOfVals = 0;
$(params[0]).each(function() {
sumOfVals += parseFloat($(this).val().length ? $(this).val() : 0);
});
if (sumOfVals == 100) return true;
return false;
},
$.format("Percentage fields most total up to 100%")
);
【问题讨论】:
-
您为
percent添加了类规则。这意味着每个带有percent类的输入都将运行您的验证规则。您希望它如何工作? -
在提交时,我希望它得到所有带有 .percent 的字段的总和,如果不等于 100%,则抛出验证错误。
-
当使用
.rules()方法时,您必须将它包装在.each()中,否则它只会应用于具有匹配类的第一个元素,如您所见。 -
@Sparky672 我同意您需要将规则包装在一个循环中以传递正确的元素,但是我担心它需要多次调用相同的 addMethod 然后需要循环百分比字段多次。
-
我不太确定您在 OP 中要问什么。它是否有效?这只是试图提高效率的问题吗?请尝试将其浓缩为一个主要的简洁问题。
标签: javascript jquery jquery-plugins jquery-validate