搜索数据为空
Searching data is null
我正在使用 jqGrid 4.6,但我也在最新版本 5.1.0 上尝试了这个。
我有这样的搜索选项定义:
loadComplete: function() {
var keys = grid.getGridParam('colModel');
for (var i=1; i<keys.length; i++) {
var cellname = keys[i].name;
grid.setColProp(cellname, {
searchoptions: {
dataUrl: 'RData_io.php?action=filter&field=' + cellname,
sopt: ['eq', 'ne', 'lt', 'gt', 'le', 'ge', 'cn', 'nc'],
postData: grid.getGridParam('postData')
}
});
}
}
dataUrl 给了我正确的 select,并且在经过少量时间后,值在下拉框中正确加载。
我们得到这样的东西:
看起来不错,但是,当我们单击 "Find" 按钮时,我们将这样的参数发布到服务器:
filters:"{"groupOp":"AND","rules":[{"field":"week1","op":"eq","data":null}]}"
因此,如您所见,"Pass" 未发布到服务器。不过,如果我们更改为 "Fail",然后再更改为 "Pass" - 它工作正常。
你能帮帮我吗,Oleg?
谢谢,
扎哈
更新:如果您使用的不是 Oleg 的 Free-jqGrid,而是一些旧版本,或者 <= 5.1.0。您可以使用此技巧,与@Oleg 提出的相同,但由于 selectFilled 不允许您使用选项,请改用此技巧:
selectFilled: function (options) {
$('.input-elm').change();
},
我在演示中看到了问题。这是 jqGrid 中的错误。感谢您的错误报告!
我明天会修复它,但仍然可以使用免费 jqGrid 的一项附加功能作为解决方法。可以使用 selectFilled
回调触发 change
事件 在 select 从 dataUrl
成功加载后
selectFilled: function (options) {
$(options.elem).change();
}
相应的searchoptions
选项看起来像
searchoptions: {
clearSearch: false,
selectFilled: function (options) {
$(options.elem).change();
},
dataUrl: '/echo/html/',
sopt: ['eq', 'ne', 'lt', 'gt', 'le', 'ge', 'cn', 'nc'],
postData: {
html: "<select><option>Pass</option></select>",
delay: 0
}
}
可以验证固定演示在过滤器 rules
中使用正确的 data
:https://jsfiddle.net/OlegKi/mxct4bdu/7/
更新: 我修复了 GitHub 源上的错误(参见 the commit). Now the demo without the workaround with selectFilled: function (options) { $(options.elem).change(); }
works correctly. See https://jsfiddle.net/OlegKi/mxct4bdu/8/
我正在使用 jqGrid 4.6,但我也在最新版本 5.1.0 上尝试了这个。 我有这样的搜索选项定义:
loadComplete: function() {
var keys = grid.getGridParam('colModel');
for (var i=1; i<keys.length; i++) {
var cellname = keys[i].name;
grid.setColProp(cellname, {
searchoptions: {
dataUrl: 'RData_io.php?action=filter&field=' + cellname,
sopt: ['eq', 'ne', 'lt', 'gt', 'le', 'ge', 'cn', 'nc'],
postData: grid.getGridParam('postData')
}
});
}
}
dataUrl 给了我正确的 select,并且在经过少量时间后,值在下拉框中正确加载。
我们得到这样的东西:
看起来不错,但是,当我们单击 "Find" 按钮时,我们将这样的参数发布到服务器:
filters:"{"groupOp":"AND","rules":[{"field":"week1","op":"eq","data":null}]}"
因此,如您所见,"Pass" 未发布到服务器。不过,如果我们更改为 "Fail",然后再更改为 "Pass" - 它工作正常。
你能帮帮我吗,Oleg?
谢谢, 扎哈
更新:如果您使用的不是 Oleg 的 Free-jqGrid,而是一些旧版本,或者 <= 5.1.0。您可以使用此技巧,与@Oleg 提出的相同,但由于 selectFilled 不允许您使用选项,请改用此技巧:
selectFilled: function (options) {
$('.input-elm').change();
},
我在演示中看到了问题。这是 jqGrid 中的错误。感谢您的错误报告!
我明天会修复它,但仍然可以使用免费 jqGrid 的一项附加功能作为解决方法。可以使用 selectFilled
回调触发 change
事件 在 select 从 dataUrl
selectFilled: function (options) {
$(options.elem).change();
}
相应的searchoptions
选项看起来像
searchoptions: {
clearSearch: false,
selectFilled: function (options) {
$(options.elem).change();
},
dataUrl: '/echo/html/',
sopt: ['eq', 'ne', 'lt', 'gt', 'le', 'ge', 'cn', 'nc'],
postData: {
html: "<select><option>Pass</option></select>",
delay: 0
}
}
可以验证固定演示在过滤器 rules
中使用正确的 data
:https://jsfiddle.net/OlegKi/mxct4bdu/7/
更新: 我修复了 GitHub 源上的错误(参见 the commit). Now the demo without the workaround with selectFilled: function (options) { $(options.elem).change(); }
works correctly. See https://jsfiddle.net/OlegKi/mxct4bdu/8/