Как передать динамическое значение в функцию проверки jquery - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть форма, в которой есть некоторые динамически добавленные данные,

Здесь у меня есть total_amt = 100;

Как я могу, форма не должна отправлять до суммы всех динамически добавленныхвходные данные должны быть равны total_amt

Вот мой код.

$(function(){
            var i = 1;
            $('#add_more').click(function(event) {
                event.preventDefault();
                $('input.items').last().attr('name', 'item['+i+']');
                $('#cart_items').append($('#tmp_cart').html());

                $('input[name="item['+i+']"]').rules("add", {
                    required: true,
                    depositsSum : function(){
                        return $(this).val();
                    },
                      messages:'Sum of total items should be equal to 100',
                });

                    i++;
                });

        $.validator.addMethod("depositsSum", function(value, element, params)
        {       
            var amnts = 0;
            $(params[0]).each(function() {
                amnts += parseFloat($(this).val());
            });

         return amnts;
        });

            $("#myForm").validate({
                rules: {
                    'item[0]': {
                        required:true
                    }
                }
            });
        })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/additional-methods.min.js"></script>

  <form action="" method="POST" id="myForm">
            Total Items<input type="text" value="100" name="total_amt" id="total_amt">

            <div id="cart_items">
                Items<input type="text" name="item[0]" class="items"><br/>
            </div>
            <button id="add_more">Add More</button> 
        <input type="submit" name="submit" value="submit">
    </form>
    <div id="tmp_cart" style="display: none;">
        <label>
            Items<input type="text" name="item[]" class="items">
            </label><br/>
    </div>

1 Ответ

0 голосов
/ 18 сентября 2018

Два недостатка в вашем коде ...

  1. Внутри вашего .rules() метода:

     depositsSum : function(){
         return $(this).val();
     },
    

    Вы пытаетесь установить свой пользовательский параметрПравило к значению поля.Это полная чушь.Параметр - это что-то вроде Max: 10, где 10 - это параметр, и он определяет правило;это никогда не фактическое значение поля, которое, между прочим, всегда изменяется и остается пустым при загрузке страницы.Если вы хотите вызвать пользовательское правило, задайте для этого параметра значение true.

    И относится к следующей проблеме ...

  2. В вашем методе .addMethod():

    $(params[0]).each(function() {
        amnts += parseFloat($(this).val());
    });
    

    Аргумент params был бы бесполезен в вашем случае, так как параметр не может использоваться для передачи динамических значений других полей.Используйте селектор jQuery, чтобы получить другие поля.Поскольку name начинается с item, используйте селектор «начинается с».

    $('[name^="item"]').each(function() {
        amnts += parseFloat($(this).val());
    });
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...