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/