我有一个如下的动手结构:
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事件发生在需要更改的同一个单元本身上,如何更改单元格的值?
答案 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
以便在您一次更改多个单元格时进行处理(例如复制和粘贴。)