我今天将我的 Chrome 更新到了 19 版,重现了问题并进行了相应的快速修复:
我建议更改jqGrid代码的the line
isSafari = $.browser.webkit || $.browser.safari ? true : false;
到下面
isSafari = ($.browser.webkit || $.browser.safari) &&
parseFloat($.browser.version)<536.5 ? true : false; // Chrome < version 19
The demo 使用此修复程序。我在演示中使用的jquery.jqGrid.src.js的固定版本你可以得到here。
我在 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 浏览器中,该演示都没有水平滚动条,如下所示:
将来最好将网格宽度的计算更深地更改为不直接依赖于任何版本号或网络浏览器。我希望在 jqGrid 的某些地方使用更多的 jQuery 方法 $.width 和 $.outerWidth 是可能的。无论如何,我希望上述修复已经对许多 jqGrid 用户有所帮助。
已更新:我以the bug report 将我的建议发布给trirand。
更新 2:确切地说,代码中有三个地方使用了与上述相同的 $.browser.webkit || $.browser.safari 构造:inside setGridWidth、inside of getOffset、inside of calculation of the width 的 @987654345 @ 列,inside showHideCol 和 inside 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 的修复版本,其中包含所有修复here。如果您必须使用旧版本的 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更小。即使您将注释标题添加到文件中(请参阅modified file),文件仍将比jquery.jqGrid.min.js 的原始版本更小。
在我的bug report 和the improvements 的一些迭代之后,还有一个修复版本,其中引入了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;
}
见here。如果您更喜欢遵循这种方式,您也可以这样做。如果在所有使用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。