当前使用Chrome v19.0.1084.46 (官方版本135956) beta-m jqGrid 4.3.2 (最新版本)
问题是,无论我的网格、列或包含div的大小如何,最后一列的一小部分会被推到网格边缘之外,导致水平滚动条出现,这是不应该发生的。如下所示:
我一直在摆弄jqGrid上的以下属性,试图解决这个问题:
width
autowidth
height
shrinkToFit
scrollOffset
-这一次运气最好,但没有可重复的。我也把基本的网格css去掉了,我想这可能是我放在place...with里的一个规则。
还有没有其他人经历过这种情况,或者找到了解决方案?非常感谢您的帮助。
发布于 2012-05-16 23:40:15
我今天把我的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),Chrome18.0.125.168,Chrome19.0.1084.46,Safari5.1.7 (7534.57.2),Firefox12,Opera11.62上测试过。在所有web浏览器中,演示都没有水平滚动条,如下所示:
在未来,最好将网格宽度的计算更改得更深,这样就不会直接依赖于任何版本号或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 of multiselect
column,inside showHideCol和inside setGridWidth。前三个位置使用isSafari
变量。最后两个位置直接使用$.browser.webkit || $.browser.safari
。应该在代码的所有地方替换
$.browser.webkit||$.browser.safari
至
($.browser.webkit || $.browser.safari) && parseFloat($.browser.version)<536.5
所以我们应该在的三个位置中这样做
the definition of isSafari
(参见我的原文) the definition of
setGridWidth
of
您可以下载包含所有修复here的jquery.jqGrid.src
的修复版本。如果您必须使用旧版本的jquery.jqGrid.src
,您可以自己在jqGrid的代码中进行相同的更改。要创建用于生产的最小化版本,您可以使用任何您熟悉的最小化程序。例如,我使用Microsoft Ajax Minifier4.0。只需安装它并执行
AjaxMin.exe jquery.jqGrid.src-fixed3.js -o jquery.jqGrid.min-fixed3.js
作为结果,你将得到比原始jquery.jqGrid.min.js
更小的jquery.jqGrid.min-fixed3.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:谷歌Chrome20使用WebKit 536.11。因此,不能使用固定宽度计算的最新版本jqGrid的所有人都应该使用parseFloat($.browser.version)<536.11
(或某种close),而不是答案开头所述的parseFloat($.browser.version)<536.5
。谷歌Chrome23 WebKit使用的是537.11。
发布于 2012-05-17 02:15:28
奥列格的解决方案对我很有效。
我刚刚编辑了最小版本
第49行:
已替换:
m=b.browser.webkit||b.browser.safari?!0:!1
通过以下方式:
m=(b.browser.webkit||b.browser.safari)&&parseFloat(b.browser.version)<536.5?!0:!1
谢谢你的帮助!
发布于 2012-05-18 21:42:31
奥列格的答案是正确的。但是,如果您使用的是较旧版本的jqGrid,并且想要应用这些修复,那么直接从Github上的差异中获取更改可能会更容易。我已经使用jqGrid 4.0.0成功地测试了这一点,因此它大概可以在任何4.x系列上工作。
只需从第一个diff开始,然后按顺序应用它们。这将添加cellWidth
函数,并对jquery.jqGrid.src.js文件进行所有必要的更改。如果你想创建一个精简的版本,你可以使用Google closure编译器:
它似乎有很多变化,但当你看实际的代码时,变化会非常快。只有几行源码会受到影响。
https://stackoverflow.com/questions/10588587
复制相似问题