【问题标题】:Input is change but .change() doesn't run输入是变化,但 .change() 没有运行
【发布时间】:2012-10-05 08:51:29
【问题描述】:

我正在动态创建一个表格,表格中的单元格是图像,每个图像都有价值。单击图库中的 img 后,它将图像发送/复制到另一个表格单元格,并将值发送到 INPUT。我正在检查这个输入的变化,我可以看到每次点击值都在变化但.change() 没有运行后,应该是什么问题。

$(document).ready(function() {
    var most;
    var clickedTableCellAll;

    var korpusMaterialNeed = 0;
    $("#korpusChoose").on('click', '#TableKorpusGaleria tbody td', function() {
        var clickedTableCell = $(this).text();
        var clickedTableCellAll = $(this).html();
        most = $.inArray(clickedTableCell, korpusArray);
        clickedId = helperArray[most].id;
        $("#helper_input_01").val(clickedId);
        $("#helper_input_02").val(most);
        cellClick(most, helperArray);

        var setKorpusArray = $('#createTableKorpus > tbody > tr').map(function() {
            return $(this).children().map(function() {
                return $(this);
            });
        });
        setSelectedCell = $("#helper_input_03").val();
        var countSection = $('#createTableKorpus > tbody > tr > td').length;
        var korpusId = most;
        setKorpusArray[1][setSelectedCell].html(clickedTableCellAll);
        console.log('===============================');

        korpusMaterialNeed = (clickedKorpus(korpusId)) / 10000;
        $("#priestor_mat_0" + (setSelectedCell)).val(korpusMaterialNeed);
        console.log('input: ' + $("#priestor_mat_0" + (setSelectedCell)).val());


    });

    function cellClick(most, helperArray) {
        var korpusId = most;
        clickedKorpus(korpusId);
    }

    function clickedKorpus(korpusId) {
        var currentKorpusCount = helperArray[korpusId].metadesc;
        var currentKorpusPlus = helperArray[korpusId].metakey;

        var sirka = $("#param_sirka").val();
        var widthValues = calcWidthInterval(sirka);
        var ddlText = $("#pocet_priestorov option:selected").text();


        var widthSect = 0;



        var newestOptions = calcSectionWidth(widthValues, sirka);
        var currentKorpMaterial = 0;
        var currentKorpusMaterial = 0;

        $.each(newestOptions, function(i, value) {
            if (value.all == ddlText) {
                widthSect = value.val;
                currentKorpusMaterial = ($("#param_hlbka").val() * widthSect) * currentKorpusCount;

                //          return currentKorpusMaterial;
            }
            else {
                console.log('clickedKorpus >>> ERROR');
            }
            //  var currentKorpMaterial = currentKorpusMaterial;
            console.log('currentKorpusMaterial' + currentKorpusMaterial);
            return currentKorpusMaterial;

        });
        console.log('korpusId >>> clickedKorpus >>>' + korpusId);



        var currentKorpMaterial = currentKorpusMaterial;
        console.log('currentKorpMaterial' + currentKorpMaterial);

        return currentKorpMaterial;
    }


    $('#userForm').on('change', '#priestor_mat_01', function() {

        alert('hi');
    });

    $("input#priestor_mat_01").change(function() {

        alert('hi');
    });

});

【问题讨论】:

  • 您的代码示例太长,您应该提供一个最小的失败代码片段

标签: jquery function input onchange


【解决方案1】:

以编程方式更新输入值(例如使用.val() 函数)不会触发change 函数。您还需要使用.trigger() 函数以编程方式触发该函数:

$("#priestor_mat_0" + (setSelectedCell)).val(korpusMaterialNeed).trigger('change');

【讨论】:

  • 谢谢 @Anthony Grist,.trigger() 函数解决了这个问题。
【解决方案2】:

当你以编程方式改变值时,它不会触发change事件,像这样改变值后调用change()

$('input').val(NEW_VAL).change()

【讨论】:

    【解决方案3】:

    插入后调用事件处理程序:

    $('#someinput').change();
    

    【讨论】:

      【解决方案4】:

      在这种情况下必须触发事件更改。 .val() 不会触发更改事件。像这样用.change() 链接它 -

         $('input').val("value").change();
      

      这将触发绑定到输入的更改事件处理程序。

      【讨论】:

        猜你喜欢
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 2018-10-24
        • 2016-01-11
        • 1970-01-01
        相关资源
        最近更新 更多