我今天将我的 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)、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
到
($.browser.webkit || $.browser.safari) && parseFloat($.browser.version)<536.5
所以应该在三个地方做到这一点:
- 在
isSafari
(见我原来的帖子)的定义
- 代替
showHideCol
- 代替
setGridWidth
您可以在此处jquery.jqGrid.src
下载包含所有修复程序的固定版本。如果您必须使用旧版本的 jqGrid,您可以对自己的代码进行相同的更改。要为生产创建最小化版本,您可以使用您熟知的任何最小化器。例如,我使用 Microsoft Ajax Minifier 4.0。只需安装并执行jquery.jqGrid.src
AjaxMin.exe jquery.jqGrid.src-fixed3.js -o jquery.jqGrid.min-fixed3.js
结果你会得到jquery.jqGrid.min-fixed3.js,它会比 original 更小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。