首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jqGrid无法在Chrome/Chrome Frame中正确呈现

jqGrid无法在Chrome/Chrome Frame中正确呈现
EN

Stack Overflow用户
提问于 2012-05-15 01:58:29
回答 8查看 23.8K关注 0票数 52

当前使用Chrome v19.0.1084.46 (官方版本135956) beta-m jqGrid 4.3.2 (最新版本)

问题是,无论我的网格、列或包含div的大小如何,最后一列的一小部分会被推到网格边缘之外,导致水平滚动条出现,这是不应该发生的。如下所示:

我一直在摆弄jqGrid上的以下属性,试图解决这个问题:

  • width
  • autowidth
  • height
  • shrinkToFit
  • scrollOffset -这一次运气最好,但没有可重复的。

我也把基本的网格css去掉了,我想这可能是我放在place...with里的一个规则。

还有没有其他人经历过这种情况,或者找到了解决方案?非常感谢您的帮助。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-05-16 23:40:15

我今天把我的Chrome更新到了19版,重现了这个问题,并做了相应的快速修复:

我建议修改jqGrid代码的the line

代码语言:javascript
复制
isSafari = $.browser.webkit || $.browser.safari ? true : false;

添加到以下内容

代码语言:javascript
复制
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 setGridWidthinside of getOffsetinside of calculation of the width of multiselect column,inside showHideColinside setGridWidth。前三个位置使用isSafari变量。最后两个位置直接使用$.browser.webkit || $.browser.safari。应该在代码的所有地方替换

代码语言:javascript
复制
$.browser.webkit||$.browser.safari

代码语言:javascript
复制
($.browser.webkit || $.browser.safari) && parseFloat($.browser.version)<536.5

所以我们应该在的三个位置中这样做

the definition of isSafari (参见我的原文) the definition of

  1. inside of setGridWidth

of

您可以下载包含所有修复herejquery.jqGrid.src的修复版本。如果您必须使用旧版本的jquery.jqGrid.src,您可以自己在jqGrid的代码中进行相同的更改。要创建用于生产的最小化版本,您可以使用任何您熟悉的最小化程序。例如,我使用Microsoft Ajax Minifier4.0。只需安装它并执行

代码语言:javascript
复制
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 reportthe improvements进行了一些迭代之后,又有一个版本的修复引入了cellWidth方法:

代码语言:javascript
复制
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 (在showHideColsetGridWidth中)的地方,您都可以使用$.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。

票数 64
EN

Stack Overflow用户

发布于 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

谢谢你的帮助!

票数 3
EN

Stack Overflow用户

发布于 2012-05-18 21:42:31

奥列格的答案是正确的。但是,如果您使用的是较旧版本的jqGrid,并且想要应用这些修复,那么直接从Github上的差异中获取更改可能会更容易。我已经使用jqGrid 4.0.0成功地测试了这一点,因此它大概可以在任何4.x系列上工作。

只需从第一个diff开始,然后按顺序应用它们。这将添加cellWidth函数,并对jquery.jqGrid.src.js文件进行所有必要的更改。如果你想创建一个精简的版本,你可以使用Google closure编译器:

它似乎有很多变化,但当你看实际的代码时,变化会非常快。只有几行源码会受到影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10588587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档