我正在 onCellSelect 中编写一些代码,执行得很好
onCellSelect: function (rowid, iCol, cellcontent) {
if (iCol > 0) {
$("#gridMain_d").jqGrid("resetSelection");
$("#gridMain_d").setSelection(rowid, true);
}
}
但问题是因为此代码 beforeSaveCell 事件未触发。我知道这一点,因为我在之前删除此代码然后开始工作。我尝试过使用return语句,但没有任何作用。
更新
我评论了上面写的代码并添加了这段代码
beforeSelectRow: function (rowid, e) {
var $self = $(this), iCol, cm,
$td = $(e.target).closest("tr.jqgrow>td"),
$tr = $td.closest("tr.jqgrow"),
p = $self.jqGrid("getGridParam");
if ($(e.target).is("input[type=checkbox]") && $td.length > 0) {
$self.jqGrid("setSelection", $tr.attr("id"), true, e);
}
else {
$self.jqGrid('resetSelection');
$self.jqGrid("setSelection", $tr.attr("id"), true, e);
}
return true;
},
但仍然 beforeSaveCell 事件未触发。
更新2
这个jsFiddle复制了这个问题。 http://jsfiddle.net/eranjali08/CzVVK/1175/
答案 0 :(得分:1)
有许多回调相互依赖。此外,它可能是jqGrid的不同版本中的这种依赖性的差异。我建议您使用beforeSelectRow
而不是onCellSelect
,因为它将是第一个在点击jqGrid单元格时调用的回调。您可能需要的所有信息都可以从e
的第二个参数(下面代码中为beforeSelectRow
)获取:
beforeSelectRow: function (rowid, e) {
var $self = $(this),
$td = $(e.target).closest("tr.jqgrow>td");
iCol = $.jgrid.getCellIndex($(e.target).closest($td[0]),
colModel = $self.jqGrid("getGridParam", "colModel"),
columnName = colModel[i].name;
//...
// one can use here $td.html(), $td.text() to access the content of the cell
// columnName is the name of the column which cell was clicked
// iCol - the index of the column which cell was clicked
return true; // or false to suppress the selection
}
您只需要忘记beforeSelectRow
应该返回告知jqGrid是否选择单击行的值。从false
返回的值"stop"
或beforeSelectRow
会禁止选择所点击的行。所有其他值都允许选择。
更新:我再次分析了您的代码,希望我找到了问题的原因。您使用resetSelection
,这在使用单元格编辑时是邪恶的。查看resetSelection
的{{3}}。
t.p.savedRow = [];
销毁包含当前编辑单元格信息的数组。因此无法保存或恢复单元格。
要解决此问题,您必须从代码中删除resetSelection
。如果您确实需要使用resetSelection
,则应将其替换为例如调用setSelection
的循环。相应的代码可能看起来接近下面的代码:
beforeSelectRow: function (rowid, e) {
var $self = $(this), iCol, cm, i, idsOfSelectedRows,
$td = $(e.target).closest("tr.jqgrow>td"),
$tr = $td.closest("tr.jqgrow"),
p = $self.jqGrid("getGridParam");
if ($(e.target).is("input[type=checkbox]") && $td.length > 0) {
$self.jqGrid("setSelection", $tr.attr("id"), true, e);
}
else {
//$self.jqGrid('resetSelection');
idsOfSelectedRows = p.selarrrow.slice(0); // make copy of the array
for (i = 0; i < idsOfSelectedRows.length; i++) {
$self.jqGrid("setSelection", idsOfSelectedRows[i], false, e);
}
$self.jqGrid("setSelection", rowid, false, e);
}
return false;
},