インライン編集をどのように実装したかを示すコードは投稿していません。インライン編集を使用する多くの異なる実装があります。最も典型的なものは
- 行選択で編集を開始し、を押して保存します。Enter別の行を選択すると、前の保存されていない行の変更が破棄されます。
- 行選択で編集を開始し、を押して保存します。Enter別の行を選択すると、前の保存されていない行の変更がサイレントに保存されます。
- 行をダブルクリックして編集を開始し、を押して保存します。Enter別の行を選択すると、前の保存されていない行の変更が破棄されます。
- 行をダブルクリックして編集を開始し、を押して保存します。Enter別の行を選択すると、前の保存されていない行の変更がサイレントに保存されます。
- 追加の列の使用法
formatter: "actions"
- inlineNavメソッドの使用
- ..。
たとえば、上記のリストの最初のバージョンを使用していて、行を選択したくない場合は、コードをonSelectRowからに移動できますbeforeSelectRow
。
デモは、可能な実装の1つを示しています。
beforeSelectRow: function (rowid) {
var $this = $(this),
editingRowId = $this.jqGrid("getGridParam", "editingRowId"),
setEditingRowId = function (newId) {
$this.jqGrid("setGridParam", {editingRowId: newId});
};
if (rowid !== editingRowId) {
if (editingRowId !== undefined) {
$this.jqGrid("restoreRow", editingRowId);
}
$this.jqGrid("editRow", rowid, {
keys: true,
oneditfunc: function (id) {
setEditingRowId(id);
},
aftersavefunc: function () {
setEditingRowId();
},
afterrestorefunc: function () {
setEditingRowId();
}
});
}
return false;
}
更新:セル編集モードを使用する場合、対応する実装はより困難です。それにもかかわらず、あなたは答えからのアイデアにほとんど従うべきである可能性があります。デモでは、必要なコードの部分を示します。キーボードバインディングは使用しません。
beforeSelectRow: function (rowid, e) {
var $this = $(this),
$td = $(e.target).closest("td"),
$tr = $td.closest("tr.jqgrow"),
iRow, iCol;
if ($tr.length > 0) {
iRow = $tr[0].rowIndex;
iCol = $.jgrid.getCellIndex($td[0]);
$this.jqGrid('setGridParam', {cellEdit: true});
$this.jqGrid('editCell', iRow, iCol, true);
$this.jqGrid('setGridParam', {cellEdit: false});
}
return false;
}