JQuery проверить динамическое процентное поле - PullRequest
5 голосов
/ 09 марта 2012

Я использую плагин проверки 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%")
);

1 Ответ

0 голосов
/ 09 марта 2012

Не используйте jquery для такой простой проверки.Я не очень понимаю, что такое шумиха вокруг jquery.Это просто делает ваш код ужасным.

    function validate() {
        var ret = false;
        var total = 0;
        var elems = document.getElementsByTagName('*'), i;
        for (i in elems) 
            if (elems[i].className == "percent") 
                total += parseFloat( elems[i].value);
        if (total == 100)
            ret = true;
        return ret;
    }
...