2

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

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

  function myformatter ( cellvalue, options, rowObject )
  {
   ....

现在,我的自定义格式化程序似乎总是指向grid 的最后一行。事实上,如果我得到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;
              }
          }
         ....

更新

我注意到如果我直接返回我想要的字符串,格式化程序工作正常(例如return rowObject[0]工作正常),而我在使用 variables 时遇到问题。此外,如果我尝试这样做,onclick=alert(rowObject[0])我会得到一个例外rowObject,说不存在。我认为这是问题所在:如果我设置t = rowObject[0],则格式化程序t用作静态变量,而不是为每一行更新它。如果我设置相同i = options.rowId,哪里i仍然是静态的......为什么?我该做什么?

4

2 回答 2

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将单独执行,因此您必须使用变量的值而不是名称。例如'onclick="alert(rowObject[0]);return false;"'会产生错误,因为全局数组 rowObject 不存在。您必须更改代码使用'onclick="alert(' + rowObject[0] + ');return false;"'它将把值rowObject[0]放在代码中。”

于 2012-02-27T09:20:32.353 回答
1

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

如果您不将代码中的错误位置本地化,则应包含您使用的代码和测试数据。

此外,您应该使用onclick而不是onClick. 您当前的代码现在可以工作,但如果您更改 DOCTYPE 就不会再工作了。

于 2012-02-26T19:24:13.650 回答