搜索数据为空

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 中使用正确的 datahttps://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/