0

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

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

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

旧搜索

新搜索

  1. 在以前的版本中,我无法从搜索框中删除所有过滤器。当框中只有一个过滤器时单击删除没有任何作用。我需要一种方法来防止用户删除最后一个过滤器控件。

已删除所有过滤器

4

1 回答 1

4

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

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

您应该考虑到 jqGrid 支持现在强大的multipleGroup: true选项。因此,您需要的可能是从同一组的另一个控件中复制选择:

在此处输入图像描述

关于你的第二个问题:

答案包含描述解除绑定想法的演示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();
        }
    }
});
于 2012-04-12T20:49:37.440 回答