【问题标题】:change cell value afterChange with or without setDataAtCell/getDataAtCell handsontable使用或不使用 setDataAtCell/getDataAtCell handsontable 更改单元格值 afterChange
【发布时间】:2017-04-19 08:58:39
【问题描述】:

我正在尝试更新已手动编辑的单元格旁边的单元格的值。例如,在进行计算时,我需要更改单元格 A2 的值。

案例步骤: - 编辑 A1 的值。 - 在 afterChange 事件中用 javascript 进行计算。 - 现在用计算的值更新 A2 中的值。

在我的情况下 getDataAtCellsetDataAtCell 方法不起作用。 我收到以下错误。

无法读取未定义的属性“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');
      })

【问题讨论】:

    标签: javascript handsontable


    【解决方案1】:

    如果您希望有人找出您收到此错误的原因,您别无选择,只能将您的 HandsOnTable 的整个定义。您在问题中提供的内容还不够。

    不过,我能做的就是给你一个working example 的:

       getDataAtCell(row,col);
    

    至少找出你在表定义中做错了什么。

    请注意,我没有将 setDataAtCell 直接包含在 afterChange 事件中,因为它会创建一个无限循环。

    this example 中,如果您尝试在表外进行计算,我会通过停止更改来防止无限循环,但尝试修改第一列的值,您会看到我在说什么。


    我对进行这种计算的建议是使用您的初始数据 (myData) 或副本(取决于您的需要)来进行计算并再次加载数据。

    假设当你用一个新的值修改一个单元格 [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);
        }
      });
    }
    

    查看完整示例here。 您会注意到再次加载表格不会像上面那样触发 afterChange 事件,因此,不要一遍又一遍地进行计算,因为每次都会触发 afterChange。

    【讨论】:

    • 谢谢哥们。你的例子对我帮助很大。
    猜你喜欢
    • 2012-12-21
    • 2014-11-22
    • 2018-06-06
    • 2018-09-17
    • 2019-12-25
    • 2020-08-16
    • 2015-09-17
    • 2018-08-07
    • 2015-11-12
    相关资源
    最近更新 更多