更新 我在使用自定义格式化程序指向数据时遇到问题。
我正在使用jqgrid的自定义格式化程序。
function myformatter ( cellvalue, options, rowObject )
{
....
现在,我的自定义格式化程序似乎始终指向网格的最后一行 。事实上,如果我得到rowObject[0]
,例如,我的网格的[第0列,最后一行]的值。为什么呢?
网格数据已正确编译,我已经检查过Json对象内容。
这是我的自定义格式化程序:
......
{ name: 'act', index: 'Detail', width: 50, sortable: false, search: false,
formatter: function (cellvalue, options, rowObject) {
i = options.rowId;
var tst = '<a class="nau" name="nau" onClick="alert(i);return false;" href="#"></a>';
var det = '<a class="det" name="det" onClick="alert(this.name);return false;" href="#"></a>';
return tst + det;
}
}
....
更新
我注意到格式化程序工作正常,如果我直接返回我想要的字符串(例如 return rowObject[0]
正常工作),而我在使用变量时遇到问题 。此外,如果我尝试onclick=alert(rowObject[0])
,我会得到一个例外,说rowObject
不存在。我认为这是问题:如果我设置t = rowObject[0]
,则格式化程序使用t
作为静态变量,而不是为每行更新它。如果我设置i = options.rowId
,i
仍然是静态的...... 为什么?我该怎么做?
答案 0 :(得分:2)
我成功地让它发挥作用......我必须说我感到有点尴尬......这是一个愚蠢的错误。无论如何,我希望我们仍然可以帮助像我一样缺乏经验的人。 我没有将变量放在引号之外:
......
{ name: 'act', index: 'Detail', width: 50, sortable: false, search: false,
formatter: function (cellvalue, options, rowObject) {
i = options.rowId;
var tst = '<a class="nau" name="nau" onClick="alert('+i+');return false;" href="#"></a>';
var det = '<a class="det" name="det" onClick="alert(this.name);return false;" href="#"></a>';
return tst + det;
}
}
....
我引用@Oleg 的宝贵帮助:“onclick
中的代码将单独执行,因此您必须使用变量的值而不是名称。例如{{ 1}}将产生错误,因为全局数组rowObject不存在。您必须更改代码以使用'onclick="alert(rowObject[0]);return false;"'
,这将'onclick="alert(' + rowObject[0] + ');return false;"'
的值放在代码中。“
答案 1 :(得分:1)
我认为你在网格的填充方面存在一些问题。如果options.rowId
对于所有行都相同,则您使用错误的数据填充网格,id
始终为1。
如果您不在本地化代码中的错误位置,则应包含您使用的代码和测试数据。
此外,您应该使用onclick而不是onClick
。您当前的代码现在可以正常工作,但是如果您更改DOCTYPE将不会有更多工作。