2

アプリで剣道グリッドを使用しています。要件は、ダブルクリックでグリッドを編集可能にすることです。イベントを処理し、.dblclickを使用してプログラムでセルを編集可能にして.editCell(cell)います。問題は、誰かがセルの外をクリックしたとき、またはEnterまたはReturnボタンを押したときに変更を保存し、誰かがESCをクリックしたときに元に戻す必要があることです。さらに、無効な日付がある場合は保存しないでください。

focusout、blur、click イベントを試しましたが、機能するもの、機能しないもの、重なってセルが開かないものがあります。

これが私のコードです。

//code for double click;
$('#grid').delegate('tbody>tr>td','dblclick', function (e) {
        console.log("double clicked");
        if($(".k-grid-edit-row").length <= 0) {
            $("#grid").data("kendoGrid").editCell($(this));
           }
    });

$('#grid tbody').on('blur','input,select,textarea',saveGrid);
    $('#grid').delegate('tbody>tr>td','focusout',function() {
        console.log("inside focusout");
        if($(this).hasClass("k-edit-cell"))
            return;
        saveGrid();
    });
    $('#grid').delegate('tbody>tr>td','click', function(e){
        console.log("singleClick called");
        if($(this).hasClass("k-edit-cell"))
            return;
        saveGrid();
    });

    function saveGrid() {
        console.log("save grid called");
        var grid = $("#grid").data("kendoGrid");
        var editedCellIndex =grid.cellIndex(grid.tbody.find(">tr td.k-edit-cell"));
        console.log("this cell index:"+grid.cellIndex($(this)));
        console.log(" Edited cell index :"+editedCellIndex);
        if(editedCellIndex<0) {
            return false;
        } 
        if($(".k-grid-edit-row").hasClass("k-invalid")) {
            return false;
        }
        grid.closeCell();
        console.log("saving changes");
        grid.saveChanges();
    }

さらに情報が必要な場合はお知らせください。

4

1 に答える 1

0

誰かがグリッドから押し出されたときにイベントを取得するには (セル外をチェックするように関数を適応させます)、次を使用します。

$('html').on('click', function (e) {
if (!$(e.target).parent().hasClass('k-master-row') && !$(e.target).hasClass('k-input')) {
    var grid = $("#Grid").data("kendoGrid")
    //use this if the row was selected
    //grid.clearSelection();

    //do something
    grid.saveChanges();
}

});

これにより、他のクリックイベントが台無しになる可能性があることに注意してください。これにより、プロジェクト.on()で他のjQueryコードで使用できなくなります(したがって、非推奨のを使用します.live())。理想的なソリューションではありません

于 2013-01-28T09:41:37.820 に答える