我尝试更新已手动编辑的单元格旁边的单元格的值。例如,在进行计算时,我需要更改单元格 A2 的值。
案例步骤: - A1 的值被编辑。 - 计算是在 afterChange 事件中用 javascript 完成的。 - 现在用计算出的值更新 A2 中的值。
在我的例子中 getDataAtCell 和 setDataAtCell 方法不起作用。 我收到以下错误。
无法读取未定义的属性“getDataAtCell”
无法读取未定义的属性“setDataAtCell”
请建议如何获取和设置这些值。无论使用 getDataAtCell/setDataAtCell 方法还是不使用这些方法。
这是代码:
afterChange: function(changes, source) {
changes.forEach(function(change) {
var row = change[0];
var col = change[1];
var oldVal = change[2];
var newVal = change[3];
alert(row + "\n" + col + "\n" + oldVal + "\n" + newVal);
/*get value at cell 1,1*/
alert(hot.getDataAtCell(1,1));
hot.setDataAtCell(row, col+1, 'Some new value');
})
如果您想让别人找出您收到此错误的原因,您别无选择,只能将 HandsOnTable 的整个定义放在其中。您在问题中提供的内容还不够。
但是,我能做的是给你一个工作示例:
getDataAtCell(row,col);
至少找出你在表定义中做错了什么。
请注意,我没有直接在 afterChange 事件中包含 setDataAtCell,因为它会创建无限循环。
在此示例中,如果您尝试在表中进行计算,但尝试修改第一列的值,我会通过停止更改来防止无限循环,您将看到我在说什么。
假设当您使用新值修改单元格 [row,col] 时,它也会通过添加您刚刚在 [row,col] 中输入的值来修改右侧的单元格 [row,col+1] [row,col+1] 的当前值:
afterChange: function(changes, source) {
if(!changes) {
return;
}
$.each(changes, function(index, element) {
var row = element[0];
var col = element[1];
var oldVal = element[2];
var newVal = element[3];
if(col+1<hot.countCols()) {
myData[row][col+1]=parseInt(myData[row][col+1])+parseInt(newVal);
hot.loadData(myData);
}
});
}
请参阅
此处的完整示例。 您可以注意到,再次加载表格不会像上面那样触发 afterChange 事件,因此,不会一遍又一遍地进行计算,因为 afterChange 每次都会触发。