gpt4 book ai didi

jquery - jqgrid ie8 多重搜索过滤器在使用 cmTemplate 时不选取搜索数据

转载 作者:行者123 更新时间:2023-12-01 01:36:30 27 4
gpt4 key购买 nike

使用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 并且当我单击“查找”而不是第一次单击数据文本框外部时,才会发生错误。 See jsfiddle here (记住输入搜索值后直接单击查找按钮)

最佳答案

我想,这是我描述的 jqGrid 输入字段刷新的一个老错误 here 。您可以尝试插入以下回调

afterRedraw: function () {
$(this).find(".input-elm").triggerHandler('change', [true]);
}

喜欢here 。您还可以尝试使用 jqGrid 4.4.1 而不是 4.3.3。该版本应该没有这样的问题。

已更新:我发现我之前发布和提交的更改已恢复:请参阅 here 。我的建议是许多改进的集合:

  1. 搜索对话框中按钮的样式与 jQuery UI 和 jqGrid 的所有其他部分一样使用。可以使用 uiButtons: false 来使用旧样式。
  2. 可以更改默认名称“+”、“-”和“+ {}”按钮以及工具提示,这些按钮和工具提示在当前版本的 jqGrid 中均为英文('添加规则'“删除规则”“添加子组”“删除组”)。
  3. 焦点将另外设置到输入控件或按钮。它允许仅通过键盘使用搜索对话框,而无需使用鼠标。
  4. 在最终从搜索对话框中读取数据之前,将在所有输入控件上触发“change”事件。

最后的更改对于解决您的问题可能很重要。

应该修改 filterData 的实现功能。应添加以下行

$(this).find(".input-elm").each(function() {
$(this).triggerHandler("change");
});

之前the line .

问题是 jqGrid 将“change”事件绑定(bind)到搜索对话框的所有输入字段(请参阅 the lines )。用户输入搜索数据后,将触发“change”事件和内部数据过滤器(请参阅rule.data,它是规则的一部分the line 中的 >filter )将被修改。如果用户单击“搜索”按钮,将获取“过滤器”的当前值(请参阅 the line )。问题在于,在某些网络浏览器中,处理“搜索”按钮上的'click' 事件后,将处理change 事件。因此,来自最后一个搜索过滤器的输入数据可能尚未设置。在返回过滤器中的数据之前对所有输入控件调用.triggerHandler("change")可以解决该问题。在这种情况下,可能会调用一些不需要的 change 事件,但可以确保 filter 中的数据与来自的数据相同。

我认为reverting of the changes这是个坏主意。

如果使用 searchOnEnter: true 选项,则使用 .triggerHandler("change") 并使用 Enter 键开始搜索问题不应该发生,因为 the line

$("#"+fid+"_search").focus().click();

在处理单击事件之前,焦点将显式设置为“搜索”按钮。这样就会间接触发“change”事件,并刷新filter中的数据。

我认为无需直接触发 change 事件就可以解决您所描述的问题。相反,可以包括焦点的显式设置

$("#"+fid+"_search").focus();

click 事件处理程序内部(请参阅 the line )。在 the line 之前执行此操作很重要其中 .jqFilter('filterData') 将被调用。

关于jquery - jqgrid ie8 多重搜索过滤器在使用 cmTemplate 时不选取搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12312452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com