我今天将Chrome浏览器更新到了19版本,已经重现了问题并进行了相应的快速修复:
我建议更改jqGrid代码的这一行
isSafari = $.browser.webkit || $.browser.safari ? true : false
to the following
isSafari = ($.browser.webkit || $.browser.safari) &&
parseFloat($.browser.version)<536.5 ? true : false
这个演示使用了修复版的
jquery.jqGrid.src.js
。你可以在
这里获取我在演示中使用的修复版。
我在IE9(v9.0.8112.16421),IE8(8.0.6001.18702CO),Chrome 18.0.125.168,Chrome 19.0.1084.46,Safari 5.1.7(7534.57.2),Firefox 12和Opera 11.62中进行了测试。在所有的Web浏览器中,演示没有水平滚动条,并且看起来如下所示:
将来最好更深入地改变网格宽度的计算方式,以便不直接依赖于任何版本号或Web浏览器。如果在jqGrid的某些地方使用更多的jQuery方法
$.width和
$.outerWidth,那么我希望这将是可能的。无论如何,我希望上述描述的修复已经对许多jqGrid用户有所帮助。
更新: 我将我的建议发布到了trirand上作为
错误报告。
更新2:确切地说,在代码中有三个地方使用了与上述相同的
$.browser.webkit || $.browser.safari
结构:
在setGridWidth内部,
在getOffset内部,
在计算multiselect
列宽度内部,
在showHideCol内部和
在setGridWidth内部。前三个地方使用
isSafari
变量。后两个地方直接使用
$.browser.webkit || $.browser.safari
。应该
在所有这些地方替换代码。
$.browser.webkit||$.browser.safari
to
($.browser.webkit || $.browser.safari) && parseFloat($.browser.version)<536.5
所以,应该在三个地方这样做:
- 在
isSafari
的定义中(参见我的原始帖子)
showHideCol
内部
setGridWidth
内部
您可以从此处下载具有所有修复程序的jquery.jqGrid.src
的修复版本。如果您必须使用旧版本的jqGrid,则可以在jquery.jqGrid.src
的代码中进行相同的更改。要创建用于生产的最小化版本,可以使用任何您熟悉的最小化工具。例如,我使用Microsoft Ajax Minifier 4.0。只需安装它并执行即可。
AjaxMin.exe jquery.jqGrid.src-fixed3.js -o jquery.jqGrid.min-fixed3.js
作为结果,您将获得
jquery.jqGrid.min-fixed3.js,它比原始的
jquery.jqGrid.min.js
更小。即使您向文件添加注释头(请参见
修改后的文件),该文件仍将比
jquery.jqGrid.min.js
的原始版本更小。
在我提交了一些
错误报告并进行了
改进后,修复程序的另一个版本引入了
cellWidth
方法。
cellWidth : function () {
var $testDiv = $("<div class='ui-jqgrid' style='left:10000px'><table class='ui-jqgrid-btable' style='width:5px;'><tr class='jqgrow'><td style='width:5px;'></td></tr></table></div>"),
testCell = $testDiv.appendTo("body")
.find("td")
.width();
$testDiv.remove();
return testCell !== 5;
}
请看这里。如果您更喜欢另一种方式,您也可以这样做。在所有使用isSafari
或$.browser.webkit || $.browser.safari
(在showHideCol
和setGridWidth
中)的地方,您可以使用$.jgrid.cellWidth()
。
更新3:今天发布了jqGrid 4.3.3,其中包含我上面描述的修复方法(cellWidth
方法)。因此,我建议所有人使用新版本。
更新4:Google Chrome 20使用WebKit 536.11。因此,无法使用带有固定宽度计算的jqGrid最新版本的所有人都应该使用parseFloat($.browser.version)<536.11
(或某些接近)而不是本答案开头描述的parseFloat($.browser.version)<536.5
。Google Chrome 23 WebKit使用537.11。
cellWidth
函数代码仍存在一个bug。我认为我可以稍微改进一下代码。请看我的评论。 - Oleg