2010-12-11 7 views
0

J'ai créé une page où element1.style.display='none' par défaut. Maintenant, j'ai un autre élément, element2, qui, lorsqu'il est cliqué, affiche element1. Mais en essayant de mettre le element1 à une fonction qui définit element1.style.display="block", il me donne une erreur en disant element1 est nulle. Je comprends c'est parce que display=none par défaut.Élément nul javascript avec affichage: aucun

Comment puis-je résoudre ce problème? c'est en utilisant javascript et pas jquery.

var hash = location.hash; 
alert(hash); 

function init() { 
    if(hash == '#menu-a' || hash == '') { 
     document.getElementById('menu-a').style.display = 'block'; 
    } 
    else if(hash == '#menu-b') { 
     document.getElementById('menu-b').style.display = 'block'; 
    } 
    else { 
     document.getElementById('menu-c').style.display = 'block'; 
    } 
} 

window.onload=init; 
+1

Votre problème n'est pas lié à 'style.display' mais pour vous aider, vous devez poster la partie pertinente de votre code. –

+0

J'aime le code humain-discours. J'aime mieux le code réel. Pourriez-vous s'il vous plaît fournir un échantillon de code? –

+0

Pouvez-vous poster votre code? L'erreur n'est pas due au fait que le style d'affichage est défini sur none. L'élément ne sera pas considéré comme nul en raison d'un attribut de style. Il y a autre chose qui se passe. – charliegriefer

Répondre

0

Si l'élément caché est toujours dans le même ordre que vous pouvez essayer d'y accéder avec getElementsByTagName (« ») [arrayindex].

+0

Avoir une référence à un élément devrait suffire. Très probablement, il s'agit d'un problème de portée et 'element1' n'est pas visible d'où il veut y accéder. Mais sans code, il n'y a vraiment rien à dire à ce sujet (une meilleure solution serait de donner un ID à l'élément et d'utiliser 'getElementById'). –

+0

tl; version dr: getElementById dans un environnement correct est la meilleure solution. Tu as raison. Commentaire complet: J'ai supposé - comme aucun code n'est fourni - que tous les éléments sont correctement identifiés et que getElementById ne fonctionnait toujours pas. Alors que getElementById est bien sûr la meilleure solution, je voulais juste fournir une solution rapide pour essayer de résoudre ce problème de manière esthétique afin de pouvoir travailler avec moins de pression. – Cadoc

+0

Voici le code var hash = location.hash; alerte (hachage); function init() { if (hash == '# menu-a' || hash == '') { document.getElementById ('menu-a'). Style.display = 'bloquer'; } else if (hash == '# menu-b') { document.getElementById ('menu-b'). Style.display = 'bloquer'; } else { document.getElementById ('menu-c'). Style.display = 'bloquer'; } } window.onload = init; –

0

Il y a une chance que le javascript soit déclenché avant dom ready? element1 existe-t-il dans dom tree au moment où vous voulez y accéder?

+0

Devrait être un commentaire imo. –

1

Je comprends c'est parce que l'affichage par défaut = aucun

Non, c'est parce que rien n'a été affecté à la variable.

Je suppose que vous attendez un élément avec id="element1" pour créer automatiquement une variable JavaScript appelée element1 - il ne devrait pas.

document.getElementById('element1').style.display = 'block'; 
0

Vous devriez faire display:block peu de temps lorsque element est initialisé, et revenir ensuite à display:none juste après l'initialisation.

0

J'ai eu un problème similaire: tous les navigateurs ne traitent pas les éléments avec display:none (ou au moins leurs enfants) de la même manière. J'ai quelques objets SVG placés dans deux DIVs et je veux montrer l'un ou l'autre. Au cours de l'initialisation, je fais quelques manipulations sur les éléments SVG (modifiez certains éléments de texte à l'intérieur du SVG). Cela a fonctionné parfaitement avec Firefox mais a échoué avec Opera, Chrome et IE. Dans ces navigateurs, les éléments qui se trouvaient à l'intérieur d'une div avec display:none ont donné un résultat nul en essayant de les obtenir avec document.getElementById(myID). Une première solution consistait à définir la propriété display:none uniquement après l'initialisation (cela a fonctionné), mais lorsque je voulais les afficher à nouveau, toute l'initialisation était perdue (les étiquettes de texte étaient toutes à leur valeur par défaut). Je pense que cela prouve que le contenu d'un DIV avec display:none est en quelque sorte effacé du DOM, pas simplement caché. J'ai essayé aussi d'utiliser visibility:hidden au lieu de display:none mais cela a fait un gros désordre avec la mise en page. La seule solution qui semble fonctionner sur tous les navigateurs est (jusqu'à présent) pour placer la DIV Je veux cacher dans « l'espace extra-atmosphérique » comme it is suggested here...

position: absolute; 
top: -9999px; 
left: -9999px; 
0

Je suppose que vous changez le style de cet élément avant même cet élément est généré dans votre page html. Lorsque vous essayez d'accéder à un élément dans une page Web, si cet élément n'est pas disponible dans la page à ce moment-là, il retourne Null Ma suggestion est d'exécuter cette partie javascript après le chargement complet de ces éléments, en utilisant des attributs comme, onclick, onload, etc ...