有没有办法恢复以前版本的jqGrid的一些功能?

时间:2012-04-12 19:21:54

标签: jqgrid

我们最近将jqgrid从3.8.2更新到4.3.1,因为我们希望能够使用搜索模板,并确保我们有所有可用的错误修复。但是,有两件事情已经发生了变化,我希望看到我是否可以使新版本的行为与以前的版本相同。

我们使用高级搜索,并将我们的网站配置为始终在网格上方显示固定的搜索对话框。

  1. 在之前的版本中,我们可以通过选择现有过滤器旁边的加号按钮来添加新过滤器。使用此+按钮将使新创建的过滤器具有与现有过滤器相同的选项。
  2. Old Search

    New Search

    1. 在之前的版本中,我无法从搜索框中删除所有过滤器。当盒子中只有一个过滤器时,单击删除不会做任何事情。我需要一种方法来阻止用户删除最后一个过滤器控件。
    2. All filters deleted

1 个答案:

答案 0 :(得分:4)

您一起发布了两个单独的问题。其他用户很难找到这些信息。最好将当前问题分成两部分。

尽管如此,关于问题的第一部分,我只想描述旧搜索对话框的行为是因为使用了jQuery.clone。该功能有很多错误,很长一段时间没有修复。所以搜索对话在某些情况下工作错误。在搜索对话框的新实现中,没有明确地使用jQuery.clone作为解决问题的唯一安全方法。您在新版“搜索对话框”中遗漏的行为默认为 。在新的搜索对话框中,相应的代码不存在,但您可以自己编写。大多数情况下,您需要在afterRedraw回调中编写自定义代码。

您应该考虑到jqGrid现在支持强大的multipleGroup: true选项。所以你需要的是从同一组的另一个控件复制选择

enter image description here

关于你的第二个问题:

The answer包含the demo,其中描述了取消绑定click的想法。可能更好的事情是取消绑定或隐藏“删除规则”按钮,只有它是唯一的按钮。

如果您不使用multipleGroup: true选项,可以尝试以下

$.extend($.jgrid.search, {
    multipleSearch: true,
    overlay: 0,
    afterRedraw: function () {
        // don't permit to remove the last rule
        $('input.delete-rule:first',this).unbind('click').hide();
    }
});

如果使用multipleGroup: true,则可能更好的是另一个代码

$.extend($.jgrid.search, {
    multipleSearch: true,
    multipleGroup: true,
    overlay: 0,
    afterRedraw: function () {
        // don't permit to remove the last rule
        var $delRules = $('input.delete-rule', this);
        if ($delRules.length === 1) {
            $delRules.unbind('click').hide();
        }
    }
});