2009-05-05 6 views
1

J'ai une table comme sicomportement étrange en javascript

<table> 
    <tr id="trRow1" runat="server" style="display: none"> 
    <td>First Name:</td> 
    <td><asp:Label id="lblFirstName" runat="server"></asp:Label></td> 
    </tr> 
    <tr> 
    <td>Last Name:</td> 
    <td><asp:Label id="lblLastName" runat="server"></asp:Label></td> 
    </tr> 
</table> 

Comme vous pouvez le voir, d'abord la première ligne n'est pas affichée. Lorsque l'utilisateur clique sur un certain bouton radio sur la page, une publication asynchrone se produit, et à ce moment-là, j'ai défini le style de trRow1 sur "inline". Rien d'extraordinaire; rien de nouveau. Cela fonctionne très bien.

Ou du moins jusqu'à ce que j'essaie de faire ce qui suit dans une fonction javascript.

function Test() {  
    var obj = trRow1.getElementsByTagName("select"); 
    alert(obj.length); 
} 

Au point où je l'appelle Test(), je reçois une erreur "erreur d'exécution Microsoft JScript: 'trRow1' est pas définie." Je suppose que cela a quelque chose à voir avec le fait que je suis en train de régler le style d'affichage en utilisant AJAX, et pour une raison quelconque, le DOM ne peut pas trouver trRow1 même après que je l'ai défini sur "inline".

Quelqu'un peut-il me jeter un os sur celui-ci? Je suis coincé.

+1

Où est défini trDegree? – karim79

+0

À quoi pointe trGefree? – roosteronacid

+0

+1 pour compenser le downvote – TStamper

Répondre

3

L'objet trDegree n'est pas défini, par vos conventions de nommage ressemble trDegree i sa élément de ligne de la table, je pense que vous essayez de faire quelque chose comme ceci:

function WTF() {  
    var trDegree = document.getElementById('trDegree'); // Locate the element 
    var obj = trDegree.getElementsByTagName("select"); 
    alert(obj.length); 
} 

De plus Référence :

+0

Ouais, ma mauvaise. Mon code d'exemple aurait dû lire trRow1, et non trDegree. – Jagd

1

Je ne vois aucune variable pour trDegree dans votre échantillon. Vous devez avoir trDegree chargé avant d'appeler getElementsByTagName.

Par exemple:

function WTF() { 
    var trDegree = document.getElementById('trDegree'); 
    var obj = trDegree.getElementsByTagName("select"); 
    alert(obj.length); 
} 

ou vous pouvez simplement charger les balises de niveau du document. Je ne suis pas sûr que ce soit l'effet que vous voulez.

function WTF() { 
    var obj = document.getElementsByTagName("select"); 
    alert(obj.length); 
} 
0

La solution est dans la première réponse. U doit obtenir l'élément avant de l'utiliser en ajoutant cette ligne:

var trRow1 = document.getElementById('trRow1');