8

編集モードがインセルに設定された剣道グリッドがあります。

特定のセルをプログラムでフォーカスして編集モードにする最もエレガントな方法は何ですか?

列 1 と 6 が編集可能なグリッドがあるとします。ユーザーが列1に何かを入力し終えるとすぐに、列6のテキストボックスが自動的にフォーカスされて編集できるようになり、ユーザーが同じ行の次の編集可能なグリッドセルを手動でクリックする必要がなくなります。

これは私が現在行っていることです:

//Focuses the editable cell at given row/column index.
//Closes the previously editing cell
//EX: setGridFocus(SALE_01_DIV_GRID,0,0) --> Focuses SALE_01_DIV_GRID (0,0)
function setGridFocus(gridID, rowIndex, colIndex)
{
    var grid = $('#' + gridID).data('kendoGrid');
    grid.closeCell();

    setTimeout(function(){
        var cell = $('#' + gridID).find('tbody tr:eq('+rowIndex+') td:eq('+colIndex+')');
        grid.editCell(cell);
        var editTextCell = cell.find("input.k-formatted-value");

        editTextCell.focus(function() {
            $(this).select().mouseup(function (e) {
                e.preventDefault();
                $(this).unbind("mouseup");
                e.select();
            });
        });
        cell.find("input[type=text]").select();
        editTextCell.selectall();
    },50); 
}

まず第一に、私は setTimeout を使用して一見些細な関数を実装しているため、これは理想的なアプローチとは思えません。

第二に、上記の関数は、そのように感じた場合にのみ機能します (テストの半分の時間しか機能しません。おそらく setTimeout 関数から予想されます)。これはKendo Grid内部で呼び出されるイベントの順番に関係しているように感じます。

第三に、フォーカスされているセル内のテキストをブロック選択したいと思います。editTextCell.selectall(); この目的では機能しません。

ガイダンスをいただければ幸いです。

4

1 に答える 1