我们正在升级项目中的jQuery和jqGrid,并在jqGrid中发现了一个可能的错误。 我们正在使用的版本:
我们使用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发布一个错误并希望他们很快修复它?
我们尝试使用引号转义点并用字符串包围字符串,但没有任何帮助。
答案 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();
我认为应该解决这个问题。