2

CellEditの前にイベントをキャッチするときに、セルが編集モードに入るのを何らかの方法で停止することは可能ですか?

beforeEditCell: function (rowid, cellname, value, irow, icol) {
    if (cellname != 'aSpecificCol')
        return;

    var grid = $("#grid");

    if (aCondition == "something")
        grid.setColProp('aSpecificCol', { editable: false });
    else
        grid.setColProp('aSpecificCol', { editable: true });
 }

イベントは発生しますが、列プロパティの設定によって編集モードが変更されていないようです。

4

2 に答える 2

7

このメソッドbeforeEditCellは、編集プロセスの途中で呼び出されます。これは主に、新しく作成された入力または選択要素で初期化を行うために存在します。

一部のセルがセル編集モードで編集されないようにする必要がある場合は、"not-editable-cell"前にセルにクラスを設定するか(たとえば、cellattrまたはでloadComplete)、一部のセルbeforeSelectRowに戻るために使用することをお勧めします。falseを返し、セルは編集されませんfalsebeforeSelectRow

beforeSelectRow: function (rowid, e) {
    var $td = $(e.target).closest("td"), iCol = $.jgrid.getCellIndex($td[0]);
    if (/* test some rules here */) {
        return false; // prevent selection and so the editing of the cell
    }
}
于 2012-04-17T08:04:24.533 に答える
0

beforeEditCellそうです、セルを編集する前により多くのコードを実行する手段しか提供しないため、別の代替手段を見つける必要があります。差出人grid.celledit.js

if ($.isFunction($t.p.beforeEditCell)) {
    $t.p.beforeEditCell.call($t, $t.rows[iRow].id,nm,tmp,iRow,iCol);
}

restoreCellただし、編集モードを防ぐために呼び出すことができるはずです。

restoreCell

iRow、iCol

インデックス列iColの行インデックスiRow(rowidと混合しないでください)を持つセルの編集されたコンテンツを復元します

例えば:

beforeEditCell: function (rowid, cellname, value, irow, icol) {
    var grid = $("#grid");
    if (cellname != 'aSpecificCol') {
        grid.jqGrid("restoreCell", irow, icol);
        return;
    }

それでも問題が解決しない場合は、afterEditCell代わりにこのコードをイベントに追加してみてください。これがより適切な場所である可能性があります。

于 2012-04-11T13:43:55.860 に答える