2009-05-05 13 views
1

Ich habe eine Tabelle wie soOdd Verhalten in 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> 

Wie Sie sehen können, zunächst die erste Zeile nicht angezeigt wird. Wenn der Benutzer auf ein bestimmtes Optionsfeld auf der Seite klickt, tritt ein asynchrones Postback auf, und zu diesem Zeitpunkt habe ich den Stil von trRow1 auf "Inline" gesetzt. Nichts Außergewöhnliches; nichts Neues. Es funktioniert einfach großartig.

Oder zumindest bis ich versuche, das folgende in einer JavaScript-Funktion zu tun.

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

An dem Punkt I Test() aufrufen, erhalte ich einen Fehler, der sagt: "Microsoft JScript-Laufzeitfehler:. 'TrRow1' ist nicht definiert"

Meine Vermutung ist, dass es etwas damit zu tun hat, dass ich den Display-Stil mit AJAX einstelle und aus welchem ​​Grund auch immer das DOM trRow1 nicht finden kann, nachdem ich es auf "Inline" gestellt habe.

Kann mir jemand einen Knochen auf diesen werfen? Ich stecke fest.

+1

Wo ist trDegree definiert? – karim79

+0

Worauf deutet trGefree hin? – roosteronacid

+0

+1 um den Downvote auszugleichen – TStamper

Antwort

3

Das Objekt trDegree nicht definiert ist, sieht durch Ihre Namenskonventionen wie trDegree i sa Tabellenzeile Element, glaube ich, dass Sie so etwas wie dies zu tun versuchen:

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

Weitere Referenz :

+0

Ja, mein Schlechter. Mein Beispielcode sollte trRow1 und nicht trDegree gelesen haben. – Jagd

1

Ich sehe keine Variable für trDegree in Ihrer Probe. Sie müssten trDegree laden, bevor Sie getElementsByTagName aufrufen.

Zum Beispiel:

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

oder Sie könnten nur die Tags aus der Dokumentebene laden. Ich bin mir nicht sicher, ob das der gewünschte Effekt ist.

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

Die Lösung ist in der ersten Antwort. U muss das Element vor der Verwendung erhalten, indem er diese Zeile hinzufügt:

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