J'ai mis à jour aujourd'hui, mon Chrome à la version 19, ont reproduit le problème et fait la quick&dirty corrigé:
Je suggère de modifier la ligne de code jqGrid
isSafari = $.browser.webkit || $.browser.safari ? true : false;
à la suite de
isSafari = ($.browser.webkit || $.browser.safari) &&
parseFloat($.browser.version)<536.5 ? true : false; // Chrome < version 19
La démo d'utiliser le correctif. La version fixe de jquery.jqGrid.src.js
que j'ai utilisé dans la démo, vous pouvez obtenir ici.
Je l'ai testé dans IE9 (v9.0.8112.16421), IE8 (8.0.6001.18702 CO), Chrome 18.0.125.168, Chrome 19.0.1084.46, Safari 5.1.7 (7534.57.2), Firefox 12, Opera 11.62. Dans tous les navigateurs web, la démo n'a pas de barres de défilement horizontale et il semble comme suit:
Dans l'avenir, il serait préférable de modifier le calcul de la largeur de la grille au plus profond de n'avoir aucune dépendance directe de tout numéro de version ou un navigateur web. J'espère que ce sera possible si l'on aurait recours à d'autres méthodes jQuery $.largeur et $.outerWidth dans certains endroits de jqGrid. De toute façon, j'espère que la décrit ci-dessus correctif serait déjà utile pour de nombreux jqGrid utilisateurs.
Mise à JOUR: j'ai posté ma suggestion pour trirand que le rapport de bug.
Mise à JOUR 2: Pour être exactement il y a trois endroits dans le code où sont utilisés de la même $.browser.webkit || $.browser.safari
construire comme décrit ci-dessus: l'intérieur de setGridWidth, à l'intérieur de getOffset, à l'intérieur du calcul de la largeur de l' multiselect
colonne, à l'intérieur de showHideCol et à l'intérieur de setGridWidth. Les trois premières places utilisations isSafari
variable. Les deux dernières places utilisations $.browser.webkit || $.browser.safari
directement. L'on doit remplacer dans tous les endroits du code
$.browser.webkit||$.browser.safari
pour
($.browser.webkit || $.browser.safari) && parseFloat($.browser.version)<536.5
Donc, il faut le faire en trois endroits:
- à la définition de l'
isSafari
(me voir post original)
- à l'intérieur de l'
showHideCol
- à l'intérieur de l'
setGridWidth
Vous pouvez télécharger la version corrigée de l' jquery.jqGrid.src
avec tous les correctifs ici. Vous pouvez faire les mêmes changements dans le code de l' jquery.jqGrid.src
vous-même si vous devez utiliser l'ancienne version de jqGrid. Pour créer version réduite de la production, vous pouvez utiliser n'importe quel minimizer qui vous savez. J'utilise par exemple Microsoft Ajax Minifier 4.0. Il suffit de l'installer et de l'exécuter
AjaxMin.exe jquery.jqGrid.src-fixed3.js -o jquery.jqGrid.min-fixed3.js
Comme résultat, vous obtiendrez jquery.jqGrid.min-fixed3.js ce qui sera encore plus petits que les originaux jquery.jqGrid.min.js
. Même si vous ajoutez le commentaire d'en-tête du fichier (voir le fichier modifié) le fichier sera toujours plus petite que la version originale de l' jquery.jqGrid.min.js
.
Après quelques itérations de mon rapport de bug et améliorations il y a encore une version du correctif où la méthode cellWidth
a été introduit:
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;
}
Voir ici. Si vous préférez suivre la façon dont vous pouvez le faire aussi. Dans le cas dans tous les lieux où l' isSafari
ou $.browser.webkit || $.browser.safari
(en showHideCol
et setGridWidth
) sont utilisés, vous pouvez utiliser $.jgrid.cellWidth()
à la place.
Mise à JOUR 3: aujourd'Hui a été publié jqGrid 4.3.3 qui contient le correctif que j'ai décrite ci-dessus (l' cellWidth
méthode). Donc, je recommande à tous d'utiliser la nouvelle version.
Mise à JOUR 4: Google Chrome 20 utilise WebKit 536.11. Donc tout le monde qui ne peuvent pas utiliser la dernière version de jqGrid avec le fixe de calcul de la largeur doit utiliser parseFloat($.browser.version)<536.11
(ou fermer) au lieu de parseFloat($.browser.version)<536.5
décrit au début de la réponse. Google Chrome 23 WebKit utilise 537.11.