水平滚动时,jqGrid列标题显示速度变慢

时间:2011-06-10 17:58:20

标签: javascript jquery jquery-ui jqgrid

我正在使用带有水平滚动条的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 个答案:

答案 0 :(得分:1)

我想这不是jqGrid中的错误。您所描述的内容与不同Web浏览器中jQuery.scroll的实现方式不同。我会试着解释为什么我这么认为。

要了解问题的位置,您应该知道列标题不是同一HTML表的一部分。在创建时,构建列标题的<th>元素实际上在<table>中,但随后在另一个div中移动。所以人们总是如此命名为hDiv(标题div)和bDiv(body div)。有关详细信息,请参阅the answer。此外,表的DOM元素接收扩展器(附加属性)grid,它保存不同的附加信息,如grid.hDiv - hDiv(头部div)和grid.bDiv的DOM元素 - DOM元素bDiv(body div)。

现在关于滚动。因为列标题位于另一个div中,所以滚动工作是异步的。要使<table>元素的jqGrid寄存器jQuery.scroll事件处理程序同步(请参阅here)并在相应的事件处理程序scrollGrid内执行以下代码:

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

(见here行)。因此,在桌面上的每个滚动事件中,滚动位置将被同步。

您描述的效果对我来说似乎只有在您放下滚动框后,FF(4.0.1)才会触发scroll事件。