2010-07-18 4 views
0

J'essaie d'accéder à la largeur de certains éléments en utilisant la fonction .width() de jQuery, mais parfois la valeur de retour est 0 quand je ne m'y attends pas. est-ce un problème connu? Est-ce qu'un élément doit être visible pour que cela fonctionne, peut-être? S'il y a des limites, comment puis-je les contourner?jQuery signale incorrectement une largeur de zéro

+0

J'attends la largeur des éléments effondrés ou cachés à zéro ou 'NaN' (à savoir non définie). – ChrisF

Répondre

8

Si vous traitez avec des images, assurez-vous d'exécuter le code dans $(window).load() plutôt que $(document).ready(), comme ceci:

$(window).load(function() { 
    var width = $("img").width(); 
}); 

Sinon, assurez-vous que l'élément est visible, des éléments cachés n'ont pas .width() ou .height() (ça va retourner 0 pour les deux).

+0

Suggérez-vous de rendre l'élément en question visible avant d'obtenir la largeur, puis de le refermer? Ou y a-t-il une meilleure solution de contournement? – Pieter

+0

@Pieter - Vous pouvez lui donner une position relative loin de la page, ou juste l'afficher/cacher ... rappelez-vous que JavaScript doit faire une pause pour que le thread d'interface se mette à jour, ainsi l'utilisateur ne verra pas ceci :) –

+0

J'ai choisi de mettre 'display' à' block' mais en gardant 'visibility' réglé sur' hidden' afin que je puisse obtenir la largeur sans risquer que l'utilisateur puisse voir l'élément même pendant une fraction de seconde. – Pieter

1

L'élément doit avoir chargé .. essayer de liaison sur la fenêtre de charge

$(window).load(function(){ alert('#img').width() }); 

Vous pouvez également essayer de définir explicitement une largeur par l'élément sur css je suppose.

0

Vous pouvez vérifier si l'image est visible avec cette condition supplémentaire

$(window).load(function(){ if($("#img").is(":visible"))alert('#img').width() });