読者です 読者をやめる 読者になる 読者になる

haru and...

猫のようにだらけ、犬のように遊ぶ。

【jQuery】【handsontable】deselectCellを実行すると落ちる件

afterChangeでセルに入力された値が数値でない場合、jQueryUIのDialogで
エラーメッセージを出し、エラー対象セルは空白にしてレンダリング

て感じのことをしたかったのですがやろうとしたら落ちた(笑)

このセルを非選択状態に出来ないと、ダイアログが立ち上がってもセル選択状態が
維持されているせいでいちいちマウスでダイアログをクリックしないと
セルの選択が外れないという残念仕様になってしまう。

エラー内容は
transformStartにて「未定義または NULL 参照のプロパティ 'highlight' は取得できません」
だそうです。

どうもafterChangeの後のイベントでセル選択を期待している他のイベントが発生する前に
選択を解除しちゃうと落ちるよってことらしい。

なので。

もうこうなったら力技でやるしか無い(笑)
必殺「setTimeout」。
setTimeout(function () { $container.handsontable('deselectCell'); }, 100);
で一応動いています。

別の正しい?やり方を知っている方、おられましたら教えて下さい。。

一応。afterChangeの全文

afterChange: function (change, source) {
    if (change === null) {
        return;
    }
    //更新セルの行
    var row = change[0][0];
    //更新セルの列
    var col = change[0][1];
    //更新前値
    var bef = change[0][2];
    //更新後値
    var aft = change[0][3];

    // 数値でなければ空白にする
    if (!isFinite(aft)) {
        data[row][col] = "";
        setTimeout(function () { $container.handsontable('deselectCell'); }, 100);
        // ダイアログ呼ぶ関数
        showErrDialog('数値以外が入力されています。', '入力');
    }
    $container.handsontable('render');
}