2009-04-29 8 views
4

J'utilise jQuery 1.3.2.Problèmes jQuery height() avec Internet Explorer 6

Je rencontre des problèmes pour obtenir une «hauteur» correcte dans Internet Explorer 6. Les valeurs de hauteur sont correctes dans tous les autres navigateurs. J'utilise également wresize jQuery plugin.

Chaque fois que le navigateur se charge, je déclenche une méthode qui redimensionne divs, des iframes basées sur les dimensions du navigateur. (Il y a une bonne raison pour cela.)

La valeur retournée de $ ('body'). Height(), dans IE 6, semble ajouter 10 pixels après chaque redimensionnement du navigateur.

Quelqu'un d'autre trouve quelque chose comme ça?

var iframeH = 0, h = 0, groupH = 0, adjust = 0; 

var tableH = $("#" + gridId + "_DXHeaderTable").parent().height(); 
var pagerH = $(".dxgvPagerBottomPanel").height(); 
var groupHeight = $(".dxgvGroupPanel").height(); 

if (pagerH == null) 
    pagerH = 0; 

if (groupHeight != null) 
    groupH = groupHeight + pagerH; 

iframeH = $('body').height(); 
h = (iframeH - (tableH + pagerH + groupH)); 

$('#' + gridId + "Panel").css("height", (h + "px")); 
$("#" + gridId + "_DXMainTable").parent().css("height", (h + "px")); 

Ce code permet de définir la hauteur d'une grille DevExpress dans son conteneur parent. Ignorer le fait que le code pourrait être meilleur. :)

Existe-t-il autre chose que du «corps» que je pourrais utiliser pour obtenir une taille correcte? J'ai essayé l'objet window ($ (window) .height()), mais cela ne semble pas aider beaucoup.

Toutes les pensées sont appréciées!

+4

Pensée: détruire IE6. Nuke-le. – Seb

+0

Lol! Si seulement je pouvais. –

Répondre

5

Le problème que vous rencontrez est plus susceptible d'être une différence de rendu CSS. En raison de problèmes de flottement, de remplissage et de différences de rendu de marge entre les navigateurs.

essayer d'obtenir $ ("corps"). InnerHeight() et $ ("corps"). OuterHeight() et de les comparer dans les différents navigateurs, vous obtiendrez des résultats communs. Dans le pire des cas, vous devrez peut-être exécuter if cases

1

Bien sûr, voici quelques idées:

Avec IE, et esp. plus ancien IE, j'aime ajouter une déclaration de setTimeout 1-10ms autour de mes fonctions de rendu de hauteur - il donne à la dom et IE une chance de "se détendre"

Aussi, assurez-vous que vous êtes des choses est visible sur la page - Pour cela, vous devrez peut-être temporairement supprimer des éléments de l'écran en utilisant la position absolue, puis les afficher à nouveau à l'écran.

Une autre chose est que height() est parfois bancale. Essayez .css ('height') pour récupérer les hauteurs [c'est aussi plus rapide] et supprimez le 'px' pour ce qui est parfois une mesure plus vraie.

+0

Merci pour la réponse rapide! Essayer certaines de vos idées Je reviendrai vers toi. –

1

ou d'utiliser un Dimensions plug in pour jQuery qui vous donne beaucoup plus de travail et son navigateur croisé.

J'utilise ce plugin pour tracer des lignes d'un draggable à un largable comme je montre it here

+0

Je pense que le plug-in Dimensions est maintenant ajouté à jQuery. –

+0

Est-ce? Je ne le savais pas, Remy (jQueryForDesigners) a dû l'utiliser une fois pour une démo, et il ne faisait pas partie de la jQuery ...Je ne peux pas le confirmer, car il existe de nombreuses méthodes pour les dimensions qui ne sont pas disponibles dans jQuery. – balexandre

-2
$('body').height(); // call this first 

iframeH = $('body').height(); //then try this 
Questions connexes