将我的应用程序从 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"]
之间的区别是什么?
答案 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中) 如果我使用[选择]它可以工作......