我在ASP.net MVC Web应用程序中使用JQgrid。
我可以使用formatters
但是,问题是我无法获得单击该按钮的行中列的值。
例如,如果我在第4行单击按钮编辑(新添加),我将需要获取该特定行的第一列的值。
我需要这个,因为我想重定向到具有该值的另一个页面并在那里进行编辑。
我无法获取该值并向其添加javascript。
请使用任何代码示例帮助解决此问题。
答案 0 :(得分:4)
以下是一个简单的示例,您可以如何动态地将按钮添加到jqgrid
不确定第一行是否是小提琴中指定的id,但您可以修改它以使用afterInsertRow
函数中的正确数据
var data = [
{id: 1, text: 'row1'},
{id: 2, text: 'row2'},
{id: 3, text: 'row3'},
{id: 4, text: 'row4'},
{id: 5, text: 'row5'},
];
$("#grid").jqGrid({
datatype: "local",
height: 250,
colNames: ['Id', 'Text', 'edit'],
colModel: [
{ name: 'id', index: 'id', sorttype: "int" },
{ name: 'text', index: 'text' },
{ name: 'edit', index: 'edit', align: 'center', sortable: false, width: '40px' }
],
caption: "Custom buttons",
data: data,
afterInsertRow: function(id, currentData, jsondata) {
var button = "<a class='gridbutton' data-id='"+id+"' href='#'>edit</a>";
$(this).setCell(id, "edit", button);
},
loadComplete: function(data) {
$(".gridbutton").on('click', function(e) {
e.preventDefault();
alert('Edit id: ' + $(this).data("id"));
});
}
});
答案 1 :(得分:3)
您无需将click
事件处理程序绑定到列中的每个按钮。每个绑定都占用了Web浏览器的内存和其他资源。从内部到外部DOM元素冒泡的大多数事件(请参阅here),鼠标单击,键盘键控,触摸触摸开始以及网格内部按钮上的其他事件将冒泡到网格的<table>
元素。 jqGrid在网格上默认注册click
事件处理程序。它会调用beforeSelectRow
和onCellSelect
回调,并从事件处理程序中触发jqGridBeforeSelectRow
和jqGridCellSelect
个事件。因此,不是在每个按钮上绑定自己的click
事件处理程序,而是使用上面列出的回调或事件中的一个。首先会使用beforeSelectRow
(或jqGridBeforeSelectRow
)。如果单击按钮时没有选择相应的行,则回调是实用的。例如,The answer显示了如何验证是否需要调用所需的列。 Another answer提供了一个非常接近您需要的示例。 One more answer为您提供了另一个代码片段。要查看有关该主题的更多旧答案,您可以使用the following query。
更新:演示http://jsfiddle.net/ShKDX/82/是对Manuel van Rijn发布的演示的修改。它证明了我的意思。