包含点的jqGrid colmodel索引字符串

时间:2011-12-28 09:58:22

标签: jquery jqgrid

我们正在升级项目中的jQuery和jqGrid,并在jqGrid中发现了一个可能的错误。 我们正在使用的版本:

  • jQuery 1.4.1升级到1.7.1
  • jqGrid 3.8.2升级到4.2.0

我们使用colmodel的index参数进行排序和搜索/过滤。当索引字符串包含点时,我们会发现问题。例如。 “Customer.Name”。

$('#grid').jqGrid({
  url: 'some/controller/action',
  datatype: 'json',
  colNames: ['Customer Name'],
  colModel: [{ name: 'CustomerName', index: 'Customer.Name' }]
});

$('#grid').jqGrid('filterGrid', '#filter',
{
  filterModel: [{ label: 'Customer Name', name: 'CustomerName', stype: 'text' }]
});

使用搜索时,浏览器会抛出异常,如下所示:

Syntax error, unrecognized expression: [name=Customer.Name]
http://localhost:8000/Scripts/jquery-1.7.1.js Line 4179

异常来自grid.addons.js中的第465行,如下所示:

447: nm = this.index;
465: v = $("input[name="+nm+"]",self).val();

代码在每个运算符中,并从colModel / filterModel获取值,因此this是该数组中的每个元素。

经过一些研究后,我们发现在jQuery 1.5中,属性选择器需要围绕值的引号,网格似乎没有使用,因此在搜索元素时失败。

问题是: 是否有任何解决方法,或者我们应该向jqGrid发布一个错误并希望他们很快修复它?

我们尝试使用引号转义点并用字符串包围字符串,但没有任何帮助。

1 个答案:

答案 0 :(得分:1)

模块grid.addons.js包含不再受支持的filterGrid等方法。您可以直接将搜索信息放在postData中(有关详细信息,请参阅here),而不是这样做。

如果您确实想使用grid.addons.js中的代码,则必须自己维护代码。要解决当前问题,可以使用$.jgrid.jqID来逃避jQuery选择器中使用的任何meta-characters。尝试替换

v = $("input[name="+nm+"]",self).val();

v = $("input[name=" + $.jgrid.jqID(nm) + "]", self).val();

我认为应该解决这个问题。