获得从jqGrid的按钮行数据
问题描述:
这里是我填的jqGrid:获得从jqGrid的按钮行数据
jQuery("#responseMessages").jqGrid(
'addRowData',
i+1,
{
distance:messages[i].distance,
age:messages[i].age,
message:messages[i].message,
messageId:messages[i].messageId,
report:reportBtn
}
);
现在reportBtn实际上是HTML标记,因此在最后一栏放置一个按钮,让用户报告的消息,这里的标记为:
var reportBtn = "<input style='height:22px;width:100px;' type='button' value='Report' onclick=\"\" />";
当我点击报告,我希望它给我从该行的MESSAGEID,这是在(MESSAGEID是隐藏的列)。
我该怎么做?
谢谢!
编辑:
function GetMessages()
{
$.ajax(
{
type: "POST",
url: "<%= Url.Action("GetMessages", "Home") %>",
success: function (result) {
var messages = result;
if (messages.length == 0)
{
$('#noMessagesAlert').show();
}
else
{
$('#noMessagesAlert').hide();
createGrid(messages);
}
},
error: function (error) {
}
});
}
function createGrid(messages)
{
var myGrid =
jQuery("#responseMessages"),
reportBtn = "<input style='height:22px;width:100px;' type='button' value='Report' />",
mydata = messages,
getColumnIndexByName = function(grid,columnName) {
var cm = grid.jqGrid('getGridParam','colModel');
for (var i=0,l=cm.length; i<l; i++) {
if (cm[i].name===columnName) {
return i; // return the index
}
}
return -1;
};
myGrid.jqGrid({
data: mydata,
datatype: 'local',
height: 'auto',
colModel: [
{ name:'distance', index:'distance', label:'Distance', width:100 },
{ name:'age', index:'age', label:'Age', width:75 },
{ name:'message', index:'message', label:'Message', width:500 },
{ name:'messageId', index:'messageId', key:true, hidden:true },
{ name:'report', index:'report', label: 'Report', width:100,
formatter:function() { return reportBtn; } }
],
loadComplete: function() {
var i=getColumnIndexByName(myGrid,'report');
// nth-child need 1-based index so we use (i+1) below
$("tbody > tr.jqgrow > td:nth-child("+(i+1)+") > input",myGrid[0]).click(function(e) {
var tr=$(e.target,myGrid[0].rows).closest("tr.jqgrow");
var x=window.confirm("Are you sure you want to report this message?")
if (x)
{
reportMessage(tr[0].id);
}
e.preventDefault();
});
},
rowNum:25,
rowList:[10,25,50],
pager: '#pager'
});
}
因此,这里的代码经过的路径。 GetMessages
从按钮单击被调用,然后如果它返回任何东西,createGrid
被调用传递到返回的消息列表中。
这是第一次完美的作品。现在,如果我再次点击同一个按钮,网格不会更新它的数据(这应该是不同的,因为不同的数据从服务器返回)。它只是保持不变。
为什么?
答
您可以通过多种方式实现您的需求。我建议使用我在the answer中描述的方式。它使用unobtrusive JavaScript风格。此外,因为您使用addRowData
和i+1
值,我怀疑您在循环中填充网格,循环中可能会有很多行,速度很慢。最好是使用的jqGrid
var myGrid = jQuery("#list"),
reportBtn = "<input style='height:22px;width:100px;' type='button' value='Report' />",
mydata = [
{messageId:"m10", message:"Bla bla", age:2, distance:123},
{messageId:"m20", message:"Ha Ha", age:3, distance:456},
{messageId:"m30", message:"Uhhh", age:2, distance:789},
{messageId:"m40", message:"Wauhhh", age:1, distance:012}
],
getColumnIndexByName = function(grid,columnName) {
var cm = grid.jqGrid('getGridParam','colModel');
for (var i=0,l=cm.length; i<l; i++) {
if (cm[i].name===columnName) {
return i; // return the index
}
}
return -1;
};
myGrid.jqGrid({
data: mydata,
datatype: 'local',
colModel: [
{ name:'report', index:'report', width:108,
formatter:function() { return reportBtn; } },
{ name:'messageId', index:'messageId', key:true, width:50, hidden:true },
{ name:'age', index:'age', label:'Age', width:50, sorttype:'int', align:'center' },
{ name:'message', index:'message', label:'Message', width:110 },
{ name:'distance', index:'distance', label:'Distance', width:80, sorttype:'int', align:'center' }
],
sortname: 'age',
sortorder: "desc",
loadComplete: function() {
var i=getColumnIndexByName(myGrid,'report');
// nth-child need 1-based index so we use (i+1) below
$("tbody > tr.jqgrow > td:nth-child("+(i+1)+") > input",myGrid[0]).click(function(e) {
var tr=$(e.target,myGrid[0].rows).closest("tr.jqgrow");
alert("clicked the row with the messageId='"+tr[0].id+"'");
e.preventDefault();
});
},
viewrecords: true,
rownumbers: true,
//multiselect:true,
height: "100%",
pager: '#pager',
caption: "How to create Unobtrusive button"
});
的data
参数演示你可以看到现场here。
谢谢,我dicepher这个,但我认为这是正确的答案。 – Scott 2011-04-09 14:26:48
嗨,使用这个,如果我尝试不止一次填充网格,它不会填充。它只会在我刷新页面并执行后才会填充。 – Scott 2011-04-09 15:03:06
@斯科特:对不起,我不明白你的意思。你填写的是哪种网格?如果点击排序列,例如在演示http://www.ok-soft-gmbh.com/jqGrid/UnobtrusiveButtons.htm网格将被新填充。您可以发布您遇到问题的网页的网址,或发布您现在使用的代码吗? – Oleg 2011-04-09 15:24:03