Javascript jqgrid自定义格式化程序:自定义格式化程序始终返回网格的最后一行。为什么?

Javascript jqgrid自定义格式化程序:自定义格式化程序始终返回网格的最后一行。为什么?,javascript,jqgrid,row,options,formatter,Javascript,Jqgrid,Row,Options,Formatter,已更新 我无法使用自定义格式化程序指向数据 我正在使用jqgrid的自定义格式化程序 function myformatter ( cellvalue, options, rowObject ) { .... 现在,我的自定义格式化程序似乎总是指向网格的最后一行。事实上,例如,如果我得到rowObject[0],我就得到了网格的[column 0,last row]的值。为什么? 网格的数据被正确编译,我已经检查了Json对象内容 这是我的自定义格式化程序: .

已更新 我无法使用自定义格式化程序指向数据

我正在使用jqgrid的自定义格式化程序

  function myformatter ( cellvalue, options, rowObject )
  {
   ....
现在,我的自定义格式化程序似乎总是指向网格的最后一行。事实上,例如,如果我得到
rowObject[0]
,我就得到了网格的[column 0,last row]的值。为什么?

网格的数据被正确编译,我已经检查了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;
              }
          }
         ....
。。。。。。
{name:'act',index:'Detail',宽度:50,可排序:false,搜索:false,
格式化程序:函数(cellvalue、options、rowObject){
i=options.rowId;
var tst='';
var det='';
返回tst+det;
}
}
....
更新


我注意到,如果我直接返回所需的字符串,格式化程序可以正常工作(例如
返回rowObject[0]
可以正常工作),而使用变量时则会出现问题。此外,如果我尝试执行
onclick=alert(rowObject[0])
操作,我会得到一个异常,说
rowObject
不存在。我认为这就是问题所在:如果我设置
t=rowObject[0]
,那么格式化程序将
t
用作静态变量,而不是为每一行更新它。如果我设置
I=options.rowId
,其中
I
保持静态…为什么?我该怎么办?

我想您在填充网格时遇到了一些问题。如果所有行的
options.rowId
都相同,则在
id
始终为1的情况下,使用错误的数据填充网格

如果您不想在代码中定位错误的位置,那么应该包括您使用的代码和测试数据


此外,在单击时应使用而不是
onClick
。您当前的代码现在可以工作了,但如果您更改DOCTYPE,将不会有更多的工作。

我成功地让它工作了……我必须说,我感到有点尴尬。。。这是一个愚蠢的错误。不管怎样,我希望我们仍然能帮助像我这样没有经验的人我没有将变量置于引号之外

      ......
     { 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;
          }
      }
     ....
。。。。。。
{name:'act',index:'Detail',宽度:50,可排序:false,搜索:false,
格式化程序:函数(cellvalue、options、rowObject){
i=options.rowId;
var tst='';
var det='';
返回tst+det;
}
}
....

我引用@Oleg的宝贵帮助:“
onclick
中的代码将单独执行,因此您必须使用变量值而不是名称。例如
'onclick=“alert(rowObject[0]);返回false;“'
将产生错误,因为全局数组rowObject不存在。您必须更改代码以使用
'onclick=“alert('+rowObject[0]+');返回false;“
这将在代码中放置
行对象[0]
的值。”

THX Oleg。已经检查了JSON结果,一切正常。我对每一行都有不同的ID…但现在我发现自定义格式化程序似乎总是指向网格的最后一行。事实上,如果我得到rowObject[0],例如,我就得到了列0的值,这是网格的最后一行!真奇怪。我之前测试过,rowObject[0]的值不同……我更改了问题,因为options.rowId可以正常工作。我认为这是该属性的一个问题,因为纯粹是巧合,该值为1。所以问题是另一个。。。THX@Larry:如果您将包含测试JSON数据和jqGrid定义,这些数据可以用来重现您的问题,那么我将尝试解决这个问题。THX Oleg。不幸的是,我正在处理无法发布的数据,我应该举个例子。无论如何,我注意到,如果我直接返回字符串,格式化程序工作得很好,而当我使用变量时,会出现问题。此外,如果我尝试执行
onclick=alert(rowObject[0])
操作,我会得到一个异常,说
rowObject
不存在。我想这就是问题所在:如果我设置
t=rowObject[0]
,那么格式化程序将
t
用作静态变量,而不是为每一行更新它。@Larry:onclick中的代码将单独执行,因此您必须使用变量的值,而不是名称。例如,
'onclick=“alert(rowObject[0]);return false;”
将产生错误,因为全局数组
rowObject
不存在。您必须更改代码以使用
'onclick=“alert('+rowObject[0]+');返回false;“
这将在代码中放置
rowObject[0]
的值。