我今天将我的 Chrome 更新到版本 19,重现了该问题并进行了相应的快速修复:
我建议改变线路的jqGrid的代码
isSafari = $.browser.webkit || $.browser.safari ? true : false;
到以下
isSafari = ($.browser.webkit || $.browser.safari) &&
parseFloat($.browser.version)<536.5 ? true : false; // Chrome < version 19
演示使用修复程序。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), .1216 Firefox .1216 . 在所有 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
到
($.browser.webkit || $.browser.safari) && parseFloat($.browser.version)<536.5
因此,应该在三个地方执行此操作:
- 在
isSafari
(见我原帖)的定义
- 代替
showHideCol
- 代替
setGridWidth
您可以jquery.jqGrid.src
在此处下载带有所有修复程序的固定版本。jquery.jqGrid.src
如果您必须使用旧版本的 jqGrid,您可以在自己的代码中进行相同的更改。要为生产创建最小化版本,您可以使用任何您熟悉的最小化程序。我使用例如 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
or $.browser.webkit || $.browser.safari
(in showHideCol
and 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。