我在ASP.NET MVC项目中使用jqgrid。我正在尝试在gridComplete函数中绑定click事件。然后我想检测被点击的单元格是否可编辑。到目前为止,我有这个:
gridComplete: function () {
var ids = jQuery("#resources").jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var cl = ids[i];
jQuery('#resources').jqGrid('editRow', cl);
}
$("#resources td").click(function(e) {
...//here I want to check if clicked cell is editable
});
}
正如您所看到的,我在加载网格后立即准备好进行编辑。这仅指具有属性editable = true的列。
更新:
解决方案非常简单:
$("#resources td").click(function(e) {
var sClassName = e.target.className;
if (sClassName == "editable") {
//editable cell is clicked
}
});
答案 0 :(得分:0)
我不完全了解您的要求。单击“可编辑”或“不可编辑”单元格时要执行哪些其他操作?
尽管如此,我建议您使用onCellSelect回调处理程序,而不是将click
事件绑定到网格的每个单元格。为了理解每个绑定需要Web浏览器的一些资源。您可以只将一个绑定到单元格的任何父元素(如<table>
元素(网格本身)),而不是将事件绑定到单元格。由于称为event flow,事件传播或事件冒泡的机制,未尝试的事件将尝试由父元素的相同事件处理程序处理或父母的父母等。事件处理程序接收Event object,target属性有助于检测最初单击的元素。
所以你可以使用像
这样的代码onCellSelect: function (rowid, iCol, cellcontent, e) {
var colModel = $(this).jqGrid('getGridParam', 'colModel');
if ($.isArray(colModel) && !colModel[iCol].editable) {
// non-editable cell is clicked
}
}
或者
onCellSelect: function (rowid, iCol, cellcontent, e) {
if (!this.p.colModel[iCol].editable) {
// non-editable cell is clicked
}
}
检测当前单击的单元格是否不可编辑。