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

时间:2012-02-26 18:50:12

标签: javascript jqgrid row options formatter

更新 我在使用自定义格式化程序指向数据时遇到问题。

我正在使用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.rowIdi仍然是静态的...... 为什么?我该怎么做?

2 个答案:

答案 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将不会有更多工作。