Handsontable onchange 事件需要更改同一单元格本身的值,而相邻的工作不工作

Posted

技术标签:

【中文标题】Handsontable onchange 事件需要更改同一单元格本身的值,而相邻的工作不工作【英文标题】:Handsontable onchange event needs to change the value of the same cell itself not working while adjacent works 【发布时间】:2016-04-15 20:56:29 【问题描述】:

我的结构如下:

var container = document.getElementById('tableorder');
                        ordertable = new Handsontable(container, 
                            data: data,
                     colHeaders: ['Pdct', 'Notes', 'Qty', 'FQty', 'Fd Qty'],
                            columns: [
                                data: 4, readOnly: false, type: 'autocomplete', source: prodnames, validator: product_validations, strict: true,
                                data: 11, readOnly: false,
                                data: 6, readOnly: false, type: 'numeric', format: '0.000', validator: qty_validations, allowInvalid: true,
                                data: 18, readOnly: true, type: 'numeric', format: '0.000',
                                data: 19, readOnly: false, type: 'numeric', format: '0.000', validator: forward_validations, allowInvalid: true
                            ],
                            minSpareRows: 1,
                            rowHeaders: true,
                            contextMenu: ['row_above', 'row_below', 'remove_row', 'undo', 'redo'],
                            colWidths: [250, rest, 100, 100, 100],
                            autoWrapRow: true,
                            autoWrapCol: true,
                            beforeRemoveRow: removerow_validation
                        );

Fd Qty栏的Onchange如下:

function forward_validations(value, callback) 
        var curdatatable = ordertable.getSourceData();

            if(value.toString().trim()=="")
                curdatatable[this.row][19] = 0;->not working
               // curdatatable[this.row][18] = 0;->working perfectly
                callback(true);
               

我正在做的是如果 onchange 值为空白,那么同一列,即第 19 列。需要改为0

这里单元格值需要改变,发生单元格的onchange函数是一样的。

curdatatable[this.row][19] = 0; -> 不工作

但如果我尝试

curdatatable[this.row][18] = 0; -> 工作

为什么会这样?

如果 onchange 事件发生在需要更改的同一单元格本身上,如何更改单元格的值?

【问题讨论】:

【参考方案1】:

您并没有真正使用 onchange 事件,而是使用了验证器功能。尝试改用beforeChange。

beforeChange: function(changes, source) 
  // changes is a 2d array like [[row, prop, oldVal, newVal], ...]
  if (changes[0][1] == 19 && changes[0][3].toString().trim() == "") 
    changes[0][3] = 0;
  
  return changes;

请注意,当您一次更改多个单元格(如复制和粘贴)时,您可能需要循环通过 changes 来处理。

【讨论】:

以上是关于Handsontable onchange 事件需要更改同一单元格本身的值,而相邻的工作不工作的主要内容,如果未能解决你的问题,请参考以下文章

当用js动态的改变一个输入框中的值后,并不能触发它的onchange事件why?

CRM 2016 IFrame 函数修改 父页面字段

请帮我解决为啥不能进入onchange事件

change事件和onchange事件,click事件和onclick事件这些都有啥区别

使用 SAPUI5 和 HandsOnTable 进行无限滚动

为啥onchange事件触发不了?求高手指教