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

我正在使用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保持静态的话,原因...为什么?我该做什么?

最佳答案

我成功地使它运转起来...我必须说,我感到有些尴尬...这是一个愚蠢的错误。无论如何,我希望我们仍然可以帮助一些像我这样没有经验的人。我没有将变量放在引号之外:

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

关于javascript - jqgrid自定义格式化程序:自定义格式化程序始终返回网格的最后一行。为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9456029/

10-11 12:03