Параметр правил проверки jquery из переменной - PullRequest
0 голосов
/ 21 мая 2018

У меня есть current_stock переменная, которая обновляется по запросу ajax каждый раз, когда я нажимаю кнопку Изменить.после успешного выполнения ajax-запроса он выдает модальное сообщение, подобное этому enter image description here

im, используя валидацию jQuery для проверки формы.одним из правил является макс.я пытаюсь установить максимальное значение равным current_stock переменной.я пытаюсь это:

$("#form_detail").validate({
    rules: {
        jumlah: {
            required: true,
            number: true,
            max: current_stock
        }
    },
    messages: {
        jumlah: {
            required: "Jumlah tidak boleh kosong.",
            number: "Jumlah hanya dapat diisi dengan angka.",
            max: "Tidak bisa melebihi sisa Stok"
        }
    },
    submitHandler: function(form) {
        save_edit();
    }
});

, но он всегда говорит, что переменная current_stock равна 0. Я пытался напечатать переменную с помощью консоли, значение переменной является правильным.но значение в проверке всегда равно 0. это где я инициализирую current_stok переменную

 <script type="text/javascript">
        var base_url = "<?php echo base_url()?>";
        var current_stock = 0;
 </script>

это функция, которая делает ajax-запрос и выдает модальное

    function edit_jumlah(id_penjualan, id_barang) {
    $.ajax({
        url: base_url + "index.php/transaksi/get_by_id/" + id_penjualan + "/" + id_barang,
        type: "GET",
        dataType: "JSON",
        success: function(data) {
            $('[name="harga"]').val(data.harga_jual);
            $('[name="id_penjualan"]').val(data.id_penjualan);
            $('[name="id_barang_modal"]').val(data.id_barang);
            $('[name="nama_barang"]').val(data.nama_barang);
            $('[name="jumlah"]').val(data.jumlah);
            $('[name="sisa_stok"]').val(data.stok);
            current_stock = data.stok;
            $("#modal_detail").modal("show");
        },
        error: function(jqXHR, textStatus, errorThrown) {

        }
    })
}

и это функция проверки

 $("#form_detail").validate({
        rules: {
            jumlah: {
                required: true,
                number: true,
                max: sisa_stok
            }
        },
        messages: {
            jumlah: {
                required: "Jumlah tidak boleh kosong.",
                number: "Jumlah hanya dapat diisi dengan angka."
            }
        },
        submitHandler: function(form) {
            save_edit();
        }
    });

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Как объяснил muecas в своем ответе:

Проблема в том, что валидатор jQuery использует значение переменной, а не ее ссылку: в момент инициализации проверки значение curent_stock равно 0, так что это будет значение, передаваемое валидатору, а не ссылка на переменную.

Однако вам не нужно переписывать все правила для элемента, чтобы он работал.Это слишком большая избыточность кода и нарушение принципа СУХОЙ (не повторяй себя).Все, что вам нужно сделать, это обновить правило max новым значением data.stok:

В $.ajax.success, измените эту строку:

current_stock = data.stok;

на:

$('#jumlah').rules('add', {
  max: data.stok
});

Если вам это не нужно для чего-то другого, вам не нужна переменная current_stock.В вашем $("#form_detail").validate просто дайте `max статическое значение:

max: 0
0 голосов
/ 21 мая 2018

Проблема в том, что валидатор jQuery использует значение переменной, а не ее ссылку: в момент инициализации валидации значение curent_stock равно 0, так что это будет значение, переданное валидатору, а не ссылкав переменную.

Чтобы добиться этого, вы должны изменять правило поля каждый раз, когда ajax-вызов завершен, вместо:

current_stock = data.stok;

В вашей функции success измените егодо:

$('[name="jumlah"]').rules('add', {
    required: true,
    number: true,
    max: data.stok,
    messages: {
        required: "Jumlah tidak boleh kosong.",
        number: "Jumlah hanya dapat diisi dengan angka.",
        max: "Tidak bisa melebihi sisa Stok"
    },
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...