2016-12-05 17 views
0

手動で編集されたセルの横にあるセルの値を更新しようとしています。計算を行う上で、例えば、セルA2の値を変更する必要があります。変更後のセル値afterChangeまたはsetDataAtCell/getDataAtCellハンドルタブルの有無

ケースステップ: - 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'); 
     }) 

答えて

0

が、あなたのHandsOnTableの定義全体を置く:ここ

はコードです。あなたの質問にあなたが提供するものでは十分ではありません。

しかし、私ができることは、あなたのworking exampleを与えている:

getDataAtCell(row,col); 

は、少なくとも、あなたのテーブル定義で間違っていたかを調べるために。

私は、無限ループを作成するため、afterChangeイベントにsetDataAtCellを直接含めなかったことに注意してください。

this exampleでは、テーブルから計算を実行しようとすると変更を停止することで無限ループを防ぎますが、最初の列の値を変更しようとすると、私の話を見ることになります。


計算のようなものを作るために私の提案は、あなたの最初のデータ(MYDATA)を使用することで、またはコピー(あなたのニーズに依存)、あなたの計算を行い、データを再ロードします。

新しい値でセル[row、col]を変更すると、[row、col + 1]に入力した値を追加することで、右側[row、col + 1]のセルも変更されます] [行、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が毎回トリガーされるため、何度も計算が繰り返されることはありません。

+0

ありがとうございました。あなたの例は私を多く助けました。 – Monsta

関連する問題