3

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

4

1 回答 1

1

我想,这是我在此处描述的刷新 jqGrid 输入字段的旧错误。您可以尝试插入以下回调

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

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

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

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

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

应该修改filterData函数的实现。应该添加行

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

前。

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

我认为恢复更改是个坏主意。

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

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

在处理单击事件之前,焦点将显式设置为“搜索”按钮。方式上"change"会间接触发事件,filter刷新里面的数据。

我认为可以在不直接触发change事件的情况下解决您描述的问题。取而代之的是,可以包括明确设置焦点

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

click事件处理程序内部(见)。在将被调用的行之前 执行此操作很重要。.jqFilter('filterData')

于 2012-09-07T09:28:14.947 回答