我试图验证一些字段和复选框,并最终计算已选中复选框的数量。

我的代码当前显示警告,如果2个值不相同,并且用户需要用复选框填充公式并将它们求和,但是我不断收到此错误:

Uncaught ReferenceError: caiet is not defined
    at HTMLButtonElement.<anonymous> (stoc_placi.php?id_order=384&id_sablon=80:731)
    at HTMLButtonElement.dispatch (jquery.min.js:3)
    at HTMLButtonElement.r.handle (jquery.min.js:3)


我的密码

$('[name^="caiet_tabel"]').change(function ()
{
    if ($(this).closest('tr').find('td:not(".all") input:checked').length == 4) {
        $(this).closest('tr').find('.all').prop('checked', true);
        sumAll(this);
    }
    let index = $(this).parent().index();
    sumRow(this, index);
});

$('.all').click(function ()
{
    sumAll(this);
})

function sumRow(el, index)
{
    sumGrup(el);
    let caiet = $(el).closest('tbody');
    let count = caiet.find('tr').find(' > td:eq(' + (index - 1) + ')
    input: checked ').length;
    caiet.find('.total td:eq(' + (index - 1) + ')').text(count);
}

function sumGrup(el)
{
    let tot =
        $(el).closest('.bife_caiet').find('[name^="caiet_tabel"]:checked').length;
    $(el).closest('.bife_caiet').siblings('.nr_caiet').find('.showcaiet').text(tot);
}

function sumAll(el)
{
    let caiet = $(el).closest('tbody');
    sumGrup(el)
    caiet.find('.total td').each(function (index, v)
    {
        let count = caiet.find('tr').find(' > td:eq(' + (index - 1) + ')
          input: checked ').length;
          caiet.find('.total td:eq(' + (index - 1) + ')').text(count);
    })
}

$('.calculeaza').click(function ()
{
    var c1 = parseInt($('.c1').val());
    var c2 = parseInt($('.c2').val());
    var c3 = parseInt($('.c3').val());
    let sum = 0;
    caiet.find('.total td').each(function (index, v)
    {
        sum += caiet.find('tr').find(' > td:eq(' + (index - 1) + ') input: checked ').length;
    })

    if (c1 + c2 + c3 != parseInt($('#placi_bugetate').val())) {
        alert('Suma paginilor declarate la caiete difera de numarul de pagini
              solicitat de client ');

          } else if (sum != parseInt($('#placi_bugetate').val())) {
        alert('Suma bifelor selectate este diferita de numar-ul paginilor
              propuse ');
          } else {
        alert('datele sunt corecte');
    }
})

$('.stoc-form').submit(function (e)
{

    if ($('#placi-ofertate').val() != $('#placi_bugetate').val()) {
        e.preventDefault();
        // $("#myModal").modal('show');
        $('[data-target="#myModal"]').trigger('click');
    }
})

var modalConfirm = function (callback)
{

    $("#btn-confirm").on("click", function ()
    {
        $("#mi-modal").modal('show');
    });

    $("#modal-btn-si").on("click", function ()
    {
        callback(true);
        $("#mi-modal").modal('hide');
    });

    $("#modal-btn-no").on("click", function ()
    {
        callback(false);
        $("#mi-modal").modal('hide');
    });
};

modalConfirm(function (confirm)
{
    if (confirm) {
        //Acciones si el usuario confirma
        $("#result").html("A apasat DA");
        $('.post-abs').click();
    } else {
        //Acciones si el usuario no confirma
        $("#result").html("A apasat NU");
    }
});

最佳答案

您应该在函数外部声明caiet变量。

在函数外部声明caiet以全局访问它

let caiet;


然后在函数内部删除所有这些代码。

let caiet = $(el).closest('tbody');


然后在其中初始化caiet

let caiet;
$('[name^="caiet_tabel"]').change(function () {

    caiet = $(this).closest('tbody');
    if ($(this).closest('tr').find('td:not(".all") input:checked').length == 4) {
        $(this).closest('tr').find('.all').prop('checked', true);
        sumAll(this);
    }
    let index = $(this).parent().index();
    sumRow(this, index);
});
$('.all').click(function () {
    caiet = $(this).closest('tbody');
    sumAll(this);
})

关于javascript - 未捕获ReferenceError:未定义caiet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58282881/

10-11 06:13