ColumnChooser free-jqgrid无法在IE9上运行

时间:2015-04-15 09:48:37

标签: javascript jquery jqgrid free-jqgrid

将我的应用程序从 jqGrid 4.6 升级到 free-jqgrid 4.8 后,columnChooser功能无效。它仅适用于IE9。可在此处进行演示:http://jsfiddle.net/2tkkqbeq/15/(请在IE9模式下打开)。
我认为问题出在jqGrid库中的 apply_perm function

   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"]之间的区别是什么?

2 个答案:

答案 0 :(得分: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")提供正确的值{{1} }。

我在自由jqGrid的代码中修改了这一行,并将关闭选择器false修改为$("option[selected]", select)

我将修复程序发布到github。因为您在演示中使用了URL $("option", select).filter(":selected"),所以演示现在将使用修改后的代码。您现在可以在IE9中验证它是否可以正常工作。

答案 1 :(得分:-1)

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