我正在尝试添加按钮而不是View
列,但我尝试使用formatter
静止按钮未加载,但其余列的记录正在进行中。
以下是我的代码:
$(function () {
$("#grid").jqGrid({
url: "/Location/LocationsList1",
datatype: 'json',
mtype: 'Get',
colNames: ['Id', 'Country Name', 'State Name', 'City Name', 'Location Name','View'],
colModel: [
{ key: true, hidden: true, name: 'Id', index: 'Id', editable: true },
{ key: false, name: 'CountryName', index: 'CountryName', editable: true },
{ key: false, name: 'StateName', index: 'StateName', editable: true },
{ key: false, name: 'CityName', index: 'CityName', editable: true },
{ key: false, name: 'Name', index: 'Name', editable: true },
{ key: false, name: 'View', index: 'View', editable: true,formatter:ViewButton }],
pager: jQuery('#pager'),
rowNum: 10,
rowList: [10, 20, 30, 40],
height: '100%',
viewrecords: true,
caption: 'Location',
emptyrecords: 'No records to display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
},
});
});
function ViewButton(cellvalue, options, rowObject) {
var rowid= options.rowid;
var button = "<button class=\"viewLineItem\" id="+ rowid+">View Line Item</button>"
$('#' + rowid).die();
$('#' + rowid).live('click', function (rowId) {
alert("hi");
alert(rowId);
});
};
我是JqGrid的新手,不知道它是如何工作的。任何指导/帮助将不胜感激。
答案 0 :(得分:0)
代码有一些问题
options
没有rowid
属性,但它具有rowId
属性。您应该将options.rowid
更改为options.rowId
$('#' + rowid).live('click', ...);
。<td>
内)。一个人在格式化程序的末尾错过了return button;
。ViewButton
将以其他颜色显示,以便将类与其他功能区分开来。您应该将ViewButton
重命名为viewButton
以保留JavaScript的标准名称转换。index
中指定colModel
属性。以同样的方式,不应该包含具有默认值的属性,例如key: false
。要为许多列指定 common 属性,可以使用cmTemplate
属性。window
对象的属性。name: 'Id'
代替使用隐藏列,可以指定id: 'Id'
的{{1}}属性。您使用jsonReader
属性,这意味着输入数据的每个项都具有属性repeatitems: false
,CountryName
等等。 id属性的默认名称(rowid - StateName
元素的id
)为<tr>
,但您使用的是id
。属性Id
通知jqGrid。修改后的代码可以是以下内容
id: "Id"
上面代码的最后一部分($(function () {
function viewButton(cellvalue, options, rowObject) {
return "<button class=\"viewLineItem\" id=\"" +
options.rowId + "\">View Line Item</button>";
}
$("#grid").jqGrid({
url: "/Location/LocationsList1",
datatype: 'json',
colNames: ['Id', 'Country Name', 'State Name', 'City Name', 'Location Name','View'],
colModel: [
{ name: 'Id', key: true, hidden: true },
{ name: 'CountryName' },
{ name: 'StateName' },
{ name: 'CityName' },
{ name: 'Name' },
{ name: 'View', editable: false, formatter: viewButton }
],
cmTemplate: { editable: true },
pager: '#pager',
rowNum: 10,
rowList: [10, 20, 30, 40],
height: '100%',
viewrecords: true,
caption: 'Location',
emptyrecords: 'No records to display',
jsonReader: { repeatitems: false, id: "Id" }
});
$("#jqGridA").click(function (e) {
var $td = $(e.target).closest("tr.jqgrow>td"),
rowid = $td.parent().attr("id"),
p = $(this).jqGrid("getGridParam");
if ($td.length > 0 && p.colModel[$td[0].cellIndex].name === "View") {
alert(rowid);
}
});
});
)为整个网格注册一个点击处理程序。如果用户单击任何单元格,则会因event bubbling而调用事件处理程序。 $("#jqGridA").click(...);
给出了被点击的DOM元素(例如e.target
)。通过使用<button>
,我们可以转到外部closest
元素,该父元素是网格的行(<td>
)。该行的<tr>
是rowid。这种绑定更有效地将点击处理程序绑定到网格内的每个按钮。
顺便说一句,jqGrid已经有一个.attr("id")
事件处理程序。可以使用click
回调,因为它将在beforeSelectRow
处理程序内部调用。只应忘记从click
回调中忘记返回true
以通知jqGrid您允许选择该行。回调beforeSelectRow
已经将beforeSelectRow
作为第一个参数,这可以简化我们的代码。最终的代码将是
rowid