jqGrid搜索运算符未定义

时间:2011-02-21 13:37:53

标签: jquery json jqgrid

我正在使用jqGrid的内置搜索功能,并开始在服务器端获取运行以执行搜索的查询的一些错误。我把它缩小到jqGrid传递给服务器的过滤器参数:

{
   "groupOp":"AND",
   "rules":[
      {
         "field":"FOO",
         "op":"ge",
         "data":"181"
      },
      {
         "field":"FOO",
         "op":"undefined",
         "data":"196"
      }
   ]
}

正如您所看到的,第二个对象中的搜索运算符是“未定义” - 这很奇怪,因为在选择搜索运算符时没有空/空选项。谁看过这个吗?这是一个已知的问题?我根本无法重现它,所以我想知道我的用户是否有“特殊”的东西来引起这种情况。我正在使用jQuery 1.4.2运行jqGrid 3.8.2。

更新:我能够在IE 7中重现错误。似乎在搜索查询中添加第二个参数会导致该浏览器中出现未定义的运算符。

更新2:根据发行说明,似乎应该在jqGrid 3.6中修复:

  

修复IE7和IE6中的searchFilter   更多时返回未定义的值   搜索一个字段。

这显然是一个错误。我将在这里结束这个问题。

1 个答案:

答案 0 :(得分:2)

问题和工作流程被描述为here。主要问题是the jQuery bug。作为解决方法,您应该在页面上包含以下代码

// we use workaround from http://www.trirand.com/blog/?page_id=393/bugs/in-multiple-search-second-and-subsequent-ops-are-sent-as-undefined-in-ie6/
// to fix the bug in the jQuery.clone (see http://bugs.jquery.com/ticket/6793 and
// dscussion on the http://api.jquery.com/clone/
$.event.special.click = {
    setup: function() {
        if ($(this).hasClass("ui-search")) {
            $(this).bind("click", jQuery.event.special.click.handler);
        }
        return false;
    },
    teardown: function() {
        $(this).unbind("click", jQuery.event.special.click.handler);
        return false;
    },
    handler: function(event) {
        //$(".ui-searchFilter td.ops select").attr("name", "op");
        $(".ui-searchFilter td.ops select").filter(function () {
            return $(this).css("display") != "none";
        }).attr("name", "op");
    }
};

目前新的MultiSelect插件正在开发中,没有这样的问题(请参阅更多信息here)。您可以从GitHub下载新的测试版。在我最近的answer中,我添加了使用新插件的演示。