Я использую плагин проверки 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>
1010 * 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
Это самое близкое к тому, что я получил работу по проверке процента. Это не очень эффективный код, поскольку он должен проходить через все поля процентов каждый раз, когда вы повторяете правила. Код все еще проверяется до того, как было выполнено действие отправки, плюс не очищает все процентные ошибки в keyup, когда процент был исправлен равным 100.
$("#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%")
);