Handsontable onchange事件需要改变相邻单元格本身的值,而不是相邻的单元格

时间:2016-01-11 14:03:33

标签: jquery cell onchange handsontable

我有一个如下的动手结构:

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数量的更改如下:

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 个答案:

答案 0 :(得分: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以便在您一次更改多个单元格时进行处理(例如复制和粘贴。)