是否有可能以某种方式阻止单元格进入编辑模式,何时捕获事件在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 });
}
事件触发,但列属性的设置似乎没有改变编辑模式。
答案 0 :(得分:7)
将在编辑过程中调用方法beforeEditCell
。它主要用于在新创建的输入或选择元素中进行一些初始化。
如果您需要在单元格编辑模式下阻止某些单元格的编辑,我会建议您有时在单元格中设置"not-editable-cell"
类(例如在cellattr
或loadComplete
中)或使用beforeSelectRow
为某些单元格返回false
。 beforeSelectRow
返回false,单元格将不会编辑。
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
}
}
答案 1 :(得分: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
事件中,这可能是更合适的地方。