jqGrid фон строк зебра / альт не работает из-за класса UI Theme
Мы не можем заставить работать зебра в jqGrid.
Мы используем altclass и altRows - проблема в том, что ui-widget-content
класс из пользовательского интерфейса JQuery имеет background
установка, которая переопределяет наш альткласс background
установка. Есть идеи?
Обновление: оба ответа ниже работают. Олег - самое чистое решение на сегодняшний день.
Чтобы решение Олега сработало, ваш класс altRows должен быть определен после включения CSS-класса JQuery UI, так как и JQuery UI, и пользовательский класс alt rows определяют свойство background и последний класс, определенный побед.
4 ответа
jqGrid использует jQuery UI class 'ui-priority-Secondary' в качестве значения по умолчанию altclass
параметр. Класс описан в документации jQuery UI как
Класс для применения к кнопке приоритета 2 в ситуациях, когда требуется иерархия кнопок. Применяет текст нормального веса и небольшую прозрачность к элементу.
Это, конечно, не совсем описание зебры, но не так много стандартных классов, которые можно использовать. К сожалению, четные строки, имеющие "ui-priority-Secondary", в большинстве тем не сильно отличаются от нечетных строк. Таким образом, чтобы улучшить видимость, нужно определить класс altclass
вручную.
Одним из наиболее естественных способов сделать четные строки, различающиеся как нечетные строки, является использование другого цвета фона. Проблема в том, что ui-widget-content
класс использовать фоновое изображение, определенное с background
Стиль CSS, так что самая родная настройка background-color
не будет работать. Чтобы решить проблему, нужно сделать одно из вещей 1) удалить ui-widget-content
класс 2) использование background
Стиль CSS вместо background-color
2) использовать background-image:none
вместе с background-color
стиль. Самый простой способ сделать это - определить свой AltRowClass
как
.myAltRowClass { background: #DDDDDC; }
или же
.myAltRowClass { background-color: #DDDDDC; background-image: none; }
а затем использовать altRows:true
а также altclass:'myAltRowClass'
параметры jqGrid.
Другой способ сделать то же самое без altRows
а также altclass
параметры:
loadComplete: function() {
$("tr.jqgrow:odd").css("background", "#DDDDDC");
}
В этом случае у вас будут небольшие недостатки в зависании или выборе четных линий. Следующий код работает лучше, но он делает то же самое, что altRows:true
а также altclass:'myAltRowClass'
делать:
loadComplete: function() {
$("tr.jqgrow:odd").addClass('myAltRowClass');
}
Конечно, цвет фона и другие атрибуты стилей CSS, которые вы можете установить для четных строк, зависят от темы, которую вы используете, поэтому, если вы планируете использовать ThemeRoller, вам придется выбрать altclass
для каждой темы, которую вы позволите выбрать.
ОБНОВЛЕНО: только что видел, что я забыл включить ссылку на демонстрационный файл, который демонстрирует то, что я написал вживую. Демо здесь.
За Олега.. в загрузке
$.each(grid.getDataIDs(),
function(index, key){
if(index % 2 !== 0) {
var t = $("#" + key, grid);
t.removeClass('ui-widget-content');
}
}
);
А затем в определении сетки:
altRows:true,
altclass:'myAltRowClass',
С помощью myAltRowClass:
.myAltRowClass { background: #F8F8F8 ; border:1px solid #DDDDDD; }
Я добавил следующий CSS в дополнительный файл для стилизации альтернативной строки и наведения строки без использования дополнительного Javascript:
table.ui-jqgrid-btable tr:nth-child(odd) td{
background-color: #E7F0FD;
}
table.ui-jqgrid-btable tr:hover:nth-child(odd) td{
background: url("images/ui-bg_glass_75_dadada_1x400.png") repeat-x scroll 50% 50% rgb(6, 41, 97);
}
Вот мое решение:
altRows : true,
altclass : 'oddRow',
gridComplete: function() {
$(".jqgrow:odd").hover(
function() { $(this).removeClass("oddRow");},
function(event) { $(this).addClass("oddRow");}
);
},
он работал для меня и может быть использован с любой темой пользовательского интерфейса.