使用ie8,jqgrid 4.3.3,jquery 1.7.2或1.5.2,多次搜索似乎错过了一些搜索参数。 在第一次添加新搜索行时,它出现在请求正文中,但带有空值(“”) 如。
"filters":"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"code\",\"op\":\"eq\",\"data\":\"\"}]}",
使用相同参数的后续搜索会发送正确的值。 我的基本设置如下(简化)
$('#Table').jqGrid({
//....
datatype: 'json',
colNames: ['Code'],
colModel: [{
name: 'Code',
index: 'Code'}],
pager: '#Pager'
}).jqGrid('navGrid', '#Pager', {
add: false,
edit: false,
del: false,
refresh: false
}, {}, {}, {}, {
multipleSearch: true
}).trigger('reloadGrid');
更新已添加jsfiddle
经过很长一段时间后,我发现只有当我使用cmTemplate指定searchoptions sopt时才会发生错误,当我点击'find'而没有首先点击数据文本框外。 See jsfiddle here(记得在输入搜索值后直接点击查找按钮)
答案 0 :(得分:1)
我想,这是一个旧的错误,刷新了jqGrid输入字段,我将其描述为here。您可以尝试插入以下回调
afterRedraw: function () {
$(this).find(".input-elm").triggerHandler('change', [true]);
}
喜欢here。您也可以尝试使用jqGrid 4.4.1而不是4.3.3。该版本应该没有这样的问题。
更新:我发现我之前发布和提交的更改已恢复:请参阅here。我的建议是收集了许多改进:
uiButtons: false
来使用旧样式。'Add rule'
,'Delete rule'
,'Add subgroup'
,'Delete group'
)。"change"
个事件。最后一项更改对于解决问题非常重要。
应该修改filterData函数的实现。应该添加行
$(this).find(".input-elm").each(function() {
$(this).triggerHandler("change");
});
在the line之前。
问题是jqGrid将'change'事件绑定到搜索对话框的所有输入字段(请参阅the lines)。在用户输入搜索数据后,将触发“更改”事件,并在{{3中查看内部数据filter
(请参阅rule.data
,filter
的一部分}})将被修改。如果用户点击“搜索”按钮,则会获得filter
的当前值(请参阅the line)。问题是{<1}}事件将在<搜索“按钮上的change
事件处理后的某些网络浏览器中处理。因此,最后一个搜索过滤器的输入数据可能尚未设置。在返回来自'click'
的数据之前,.triggerHandler("change")
对所有输入控件的调用可能会解决问题。如果可以调用一些不需要的filter
事件,但可以确保change
中的数据与来自的数据相同。
我认为the line是个坏主意。
如果使用filter
选项使用searchOnEnter: true
并开始使用 Enter 键进行搜索,则问题不应该由于reverting of the changes
.triggerHandler("change")
在处理click事件之前,焦点将显式设置为“搜索”按钮。通过方式触发$("#"+fid+"_search").focus().click();
事件,并刷新"change"
中的数据。
我认为可以在不直接触发filter
事件的情况下解决您所描述的问题。而不是那个可以包括焦点的明确设置
change
在$("#"+fid+"_search").focus();
事件处理程序内部(请参阅the line)。在 the line之前执行此操作非常重要,click
将会被调用。