【问题标题】:jqgrid ie8 multiple search filter not picking search data when using cmTemplatejqgrid ie8多重搜索过滤器在使用cmTemplate时不选择搜索数据
【发布时间】:2012-09-01 00:05:13
【问题描述】:

使用 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(记得输入搜索值后直接点击查找按钮)

【问题讨论】:

    标签: jquery search jqgrid


    【解决方案1】:

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

    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 中('Add rule''Delete rule''Add subgroup' , 'Delete group')。
    3. 焦点将另外设置为输入控件或按钮。它允许仅通过键盘使用搜索对话框,而无需使用鼠标。
    4. 在从搜索对话框中最终读取数据之前,将在所有输入控件上触发 "change" 事件。

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

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

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

    the line之前。

    问题在于 jqGrid 将“更改”事件绑定到搜索对话框的所有输入字段(请参阅the lines)。用户键入搜索数据后,将触发“更改”事件,并修改内部数据filter(参见rule.data,这是filter 的一部分,在the line 中)。如果用户单击搜索按钮,则将获得filter当前 值(参见the line)。问题是change 事件将在某些网络浏览器中处理 处理“搜索”按钮上的'click' 事件之后。因此,可能尚未设置来自最后一个搜索过滤器的输入数据。在将返回来自filter 的数据之前对所有输入控件调用.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') 的位置之前执行此操作很重要。

    【讨论】:

    • @chohi:您应该在定义multipleSearch: true 的同一级别上包含回调。查看the demo中的代码。这是searching的回调。
    • 使用最新的网格 4.4.1 和 jquery 1.7.2 - 在我编辑新的过滤器行之前重绘触发后,@oleg 不能做,尽管如此,记录 input-elm 的 val()显示我的新值,我是否需要使用选择的过滤器扩展 postdata 的函数的句柄?
    • @chohi:我不确定我是否理解你。我描述的问题应该在 jqGrid 4.4.1 中修复。您可以尝试在jquery.jqGrid.src.jsthe line 上设置断点,并验证在用户填写要过滤的数据后会调用the line。您可以发布重现所描述问题的工作演示或 URL。
    • 嗨@oleg , src 工作正常,它可以与缩小不同吗?今天晚些时候我有时间来回切换验证
    • @chohi:这个问题只存在于 jqGrid 的缩小版本中,这听起来很奇怪。您可以使用例如您可以从ajaxmin.codeplex.com 获取AjaxMin.exe 并使用它来缩小jquery.jqGrid.src.js、CSS 和其他文件。在最小化诸如 grid.locale-en.js、grid.locale-de.js 之类的语言环境文件时,您应该使用 -enc:in utf-8 -enc:out utf-8 附加开关。
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多