【问题标题】:ColumnChooser free-jqgrid is not working on IE9ColumnChooser free-jqgrid 不适用于 IE9
【发布时间】:2015-04-15 09:48:37
【问题描述】:

将我的应用程序从 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"] 有什么区别?

【问题讨论】:

    标签: javascript jquery jqgrid free-jqgrid


    【解决方案1】:

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

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

    我修复了 free jqGrid 代码中的行以及关闭选择器 $("option[selected]", select)$("option", select).filter(":selected")

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 2012-09-14
        • 1970-01-01
        • 2016-10-06
        • 2018-01-06
        相关资源
        最近更新 更多