ColumnChooser free-jqgrid не работает в IE9

После обновления моего приложения с jqGrid 4.6 до free-jqgrid 4.8 функция columnChooser не работает. Это только в IE9. Демо доступно здесь: http://jsfiddle.net/2tkkqbeq/15/ (откройте его в режим IE9).
Я думаю, проблема в функции apply_perm в библиотеке jqGrid:

   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"]?


person Mlodey    schedule 15.04.2015    source источник


Ответы (2)


Спасибо за сообщение об ошибке! Мне нравятся вопросы с демонстрацией, которые можно использовать для воспроизведения проблемы.

Это ошибка в jqGrid 4.7 (см. строку и сравните ее с соответствующую строку jqGrid 4.6). Лучшим тестом для выбранного варианта является использование .is(":selected"). Соответствующая реализация jQuery использует все особенности реализации в разных версиях веб-браузеров. Селектор .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.

person Oleg    schedule 15.04.2015

У меня проблема с этим фильтром :selected. Также в демоверсии, если вы удалите столбец и сразу же прочитаете столбец, не закрывая columnchooser, столбец останется скрытым, потому что $(this).is(":selected") возвращает false (и я не могу понять причину, но это происходит как в хроме и краю, где я это тестировал) Если я использую вместо этого [выбрано], это работает...

person Luca Pinasco    schedule 04.08.2016