JQGrid自定义格式化程序不适用于按钮创建
我正在使用JQGrid客户格式化程序来创建按钮但按钮没有显示。
function viewLineBtn(cellvalue, options, rowObject) { alert(cellvalue +","+options+","+rowObject); var rowid = options.rowid; var button = "" $('#' + rowid).die(); $('#' + rowid).live('click', function(rowId) { alert("hi"); alert(rowId); }); }
在alert方法中,除了rowObject之外,我没有为那些参数定义。 我错过了什么?
首先,我认为jqGrid如何使用自定义格式化程序存在一些误解。 jqGrid 将整个jqGrid体(
)构建为一个字符串 。 默认情况下,jqGrid将单元格数据直接放在单元格中,使用格式化程序购买可以将另一个字符串替换为列的单元格内容(
元素的内容)。 因此,自定义格式化程序必须返回字符串 。 您当前的viewLineBtn
函数返回undefined
。
下一个问题。 jqGrid 为页面的所有行调用自定义格式化程序,构建
,将其插入到网格中,然后才能将其绑定到click
事件。
它足以在网格(
)元素上绑定click
事件处理程序,并且由于事件冒泡,将在点击网格的任何内部元素时调用事件处理程序。 jqGrid已经注册了一个click
事件处理程序。 因此,您可以使用beforeSelectRow
而不是注册自己的click
处理程序。 beforeSelectRow
回调的第二个参数是click
的Event对象 。 因此,可以使用event.target来获取所有必需的信息。 没有rowid
需要设置。 特别是您当前的代码在按钮上分配相同的id值 ,如rowid(外行的id
)。
一个不需要为按钮分配任何id并使用$(e.target).closest("tr.jqgrow").attr("id")
来获取rowid。
使用按钮的列的最终定义可以是例如以下内容:
{ name: "mybutton", width: 100, sortable: false, resizable: false, hidedlg: true, search: false, align: "center", fixed: true, viewable: false, formatter: function () { return ""; } }
和beforeSelectRow
的代码可以
beforeSelectRow: function (rowid, e) { if ($(e.target).is("button.viewLineItem")) { alert($(e.target).closest("tr.jqgrow").attr("id")); return false; // don't select the row on click on the button } return true; // select the row }
查看演示https://jsfiddle.net/OlegKi/x0j55z1m/