为jqGrid的所有页面启用editGridRow方法

问题是我能够在点击当前页面有10条记录的链接时获得编辑对话框。但是当我导航到第二页时,我没有得到编辑对话框。 请提前帮助,谢谢

colModel:{ name: "FirstName", index: "FirstName", width: 100, sortable: true, editable: true, formatter: GetRow, unformat: GetCellValue }, function GetRow(cellvalue, options, rowObject) { return "" + cellvalue + ""; } $('.GetLink').click(function () { var row = $('#grid').jqGrid('getGridParam', 'selrow'); if (row) { $('#grid').jqGrid('editGridRow', row, { recreateForm: true, closeAfterEdit: true, closeOnEscape: true, reloadAfterSubmit: false,}); } else { alert("Select the row you want to edit"); } }); 

请重新阅读我之前的问题的答案 。 您不应该使用 $('.GetLink').click因为它在当前存在的 a.GetLink上注册链接。 准确地说$('.GetLink')搜索当前存在的元素,它们具有类GetLink并将DOM元素的返回数组作为jQuery包装器。 通过.click您可以在每个元素上注册单独的单击手柄。 如果用户导航到第二页,按某些列排序或执行许多其他操作,则将重新创建网格主体。 之前创建的所有a.GetLink元素都将被删除, 新的 a.GetLink 行(

元素)将插入到网格主体中。 元素将没有原因的事件处理程序。 您可以通过移动$('.GetLink').click来解决问题$('.GetLink').click loadComplete回调内部,但我建议您使用beforeSelectRow

我之前已经给你写了关于选择之路的信息。 我在这里详细解释它是如何工作的。 HTML页面的所有元素都支持DOM接口,其中包括onclick方法。 重要的是要理解事件处理(事件流)支持事件冒泡 ,这意味着向上传播将继续在父元素上直到Document(参见此处 )。 任何事件处理程序都可以调用Event接口的stopPropagation方法来防止进一步的事件传播。

因此,如果用户单击表单元格的内部元素,则click事件处理程序将不仅绑定到元素,而且绑定到父对象的事件处理程序。 如果您在table#grid #grid上有网table#grid那么您可以按使用情况在整个网格上注册click handler

 jQuery("#grid").click(function (e) { // e.target represent the DOM element INSIDE of the table // which was clicked }); 

并且在点击网格的任何内部元素时调用事件处理程序(例如,在some text )。 e.target为我们提供了有关被点击元素的完整信息。 我们可以使用var $td = $(e.target).closest("td")或更好的var $td = $(e.target).closest("tr.jqgrow>td")来访问DOM层次结构直到网格单元格。 返回的值将是DOM元素的jQuery包装器,它表示

元素。 我用$开始相应的JavaSvript变量的名称,以使代码更具可读性并强调它是jQuery包装器。 因此$td[0]将是DOM元素。 每个td DOM元素都支持cellIndex属性(参见此处和此处 )。 因此$td[0].cellIndex是单击列的索引, colModel[$td[0].cellIndex].name是列的名称,单击该列(其中var colModel = $(this).jqGrid("getGridParam", "colModel") )。 如果你需要获取rowid(行

id属性的值),那么你可以使用$td.closest("tr.jqgrow").attr("id")

jqGrid的现有代码包含类似的代码

 ... var ts = this; // the DOM of the grid ... $(ts).click(function (e) { ... var rowid = $(e.target)("tr.jqgrow").attr("id"); ... if ($.isFunction(p.beforeSelectRow)) { var isAllowSelection = p.beforeSelectRow.call(ts, rowid, e); if (isAllowSelection) { ... } } }) 

因此,不需要注册额外的click处理程序。 可以使用beforeSelectRow回调代替。 人们应该忘记返回true以允许选择行。

演示https://jsfiddle.net/wugfty1o/3/演示了beforeSelectRow的用法。