Отображение заголовка столбца jqGrid замедляется при горизонтальной прокрутке - PullRequest
0 голосов
/ 10 июня 2011

Я использую jqGrid с горизонтальной полосой прокрутки, но когда я использую горизонтальную полосу прокрутки, заголовок столбца не перемещается вместе со столбцами. Как только я перестаю прокручивать, сетка возвращается в нормальное состояние. Смотрите прикрепленную картинку: enter image description here

Это происходит в FF (4.0.1), но не в IE8.

Вот параметры сетки, которые я использую:

width:'800',
shrinkToFit:false,
height: 500,
pager: '#pagerDiv',
gridview: true,
rowNum: 50,
rowTotal: 500,
sortorder: 'desc',
cellEdit: true,
cellsubmit: 'remote',
cellurl: 'MyURL',
beforeSaveCell: 
function (rowid, cellname, value, iRow, iCol) {
    return parse(value);
},
viewrecords: true,
loadComplete: loadCompleteHandler,
ignoreCase: true

....

jQuery(function(){
        jQuery("#listTable").jqGrid('filterToolbar',{
                            stringResult: true,
                            searchOnEnter: false });
    });

У меня jqGrid версия 3.8.2, jQuery 1.4.4 (полная версия). Есть ли способ это исправить?

1 Ответ

1 голос
/ 10 июня 2011

Полагаю, это не ошибка в jqGrid.То, что вы описываете, выглядит как различие в том, как jQuery.scroll реализован в различных веб-браузерах.Я попытаюсь объяснить, почему я так думаю.

Чтобы понять, в чем проблема, вы должны знать, что заголовки столбцов не являются частью одной и той же HTML-таблицы .Во время создания элементы <th>, которые создают заголовки столбцов, действительно находятся в <table>, но затем они перемещаются в другой элемент div.Таким образом, всегда есть так называемые hDiv (заголовок div) и bDiv (тело div).Подробнее см. ответ .Кроме того, элемент DOM таблицы получает расширитель (дополнительное свойство) grid, который сохраняет различную дополнительную информацию, такую ​​как grid.hDiv - элемент DOM hDiv (заголовок div) и grid.bDiv - элемент DOM bDiv (тело div)).

Теперь о прокрутке.Поскольку заголовки столбцов находятся в другом div, прокрутка работает асинхронно.Чтобы синхронизировать его, зарегистрируйте jqGrid jQuery.scroll обработчик события для элемента <table> (см. здесь ) и внутри соответствующего обработчика события scrollGrid выполните следующеекод:

grid.hDiv.scrollLeft = grid.bDiv.scrollLeft;

(см. строку здесь ).Поэтому при каждом событии прокрутки на столе позиция прокрутки будет синхронизироваться.

Эффект, который вы описываете, кажется мне, что FF (4.0.1) запускает событие scroll только после того, как вы уроните поле прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...