1

将我的应用程序从jqGrid 4.6升级到free-jqgrid 4.8后,columnChooser 功能不起作用。它只在IE9上。Demo 可在此处获得:http: //jsfiddle.net/2tkkqbeq/15/(请在 IE9 模式下打开)。
我认为问题出在 jqGrid 库中的apply_perm 函数中:

   apply_perm: function () {
        var perm = [];
        $("option", select).each(function () {
            if ($(this).is("[selected]")) {
                $self.jqGrid("showCol", colModel[this.value].name);
            } else {
                $self.jqGrid("hideCol", colModel[this.value].name);
            }
        });
    }

当我改变if ($(this).is("[selected]"))if ($(this).is(":selected"))开始工作。

is("[selected]")和 和有什么不一样is[":selected"]

4

2 回答 2

1

感谢您的错误报告!我喜欢可以用来重现问题的演示问题。

这是 jqGrid 4.7 中的错误(参见该行并将其与jqGrid 4.6的相应行进行比较)。选定选项的最佳测试是使用.is(":selected"). jQuery 的相应实现使用了在不同版本的 Web 浏览器中实现的所有细节。选择器.is("[selected]")意味着该selected属性以某个值存在。通常,该属性selected应具有值"selected"( selected="selected")。我使用您的演示进行的测试表明,如果 IE9 有selected=""值并且测试.is("[selected]")返回错误的值true而不是.is(":selected")提供正确的值false

我修复了免费 jqGrid 代码中的行,另外将关闭选择器$("option[selected]", select)固定为$("option", select).filter(":selected").

我将修复程序发布到 github。因为您在演示中使用了 URL //rawgit.com/free-jqgrid/jqGrid/master/js/jquery.jqgrid.src.js,所以演示现在将使用修改后的代码。您可以验证它现在在 IE9 中是否正常工作。

于 2015-04-15T11:24:49.210 回答
-1

我有与此过滤器相关的问题:已选择。同样在演示中,如果您删除一列并立即读取该列而不关闭 columnchooser,该列将保持隐藏,因为 $(this).is(":selected") 返回 false (我无法理解原因,但这两种情况都会发生在我测试过的chrome和edge中)如果我改用[selected]它可以工作......

于 2016-08-04T12:51:15.270 回答