JS und der IE
Bertie
- javascript
Hallo zusammen,
ich versuche eine Tabelle erst dann einzublenden, wenn ein Radiobutton geklick wurde. Dazu verwende ich folgenden Code:
Die Tabelle:
<table width="300" border="0" cellspacing="0" cellpadding="3" name="blubb" style="display:none;">
Der Radio Button:
<input type="radio" name="status" value="test" onClick="document.getElementsByName('blubb')[0].style.display = 'block';" />
Im Firefox klappt wie immer alles bestens. Nur der IE will die Tabelle einfach nicht einblenden. Kann mir jemand einen Tipp geben woran das liegt?
Im Firefox klappt wie immer alles bestens. Nur der IE will die Tabelle einfach nicht einblenden. Kann mir jemand einen Tipp geben woran das liegt?
Hier hat ausnahmsweise mal der IE recht. Ein Table Element hat kein Attribut name
Struppi.
@@Bertie:
<table width="300" border="0" cellspacing="0" cellpadding="3" name="blubb" style="display:none;">
Wie Struppi schon sagte, ist das kein gültiges HTML. In etlichen Browsern kümmern sich deren JavaScript-Interpreter nicht um irgendwelche Phantasie-Attribute. Warum sollten sie auch?
Gib der Tabelle eine ID!
<input type="radio" name="status" value="test" onClick="document.getElementsByName('blubb')[0].style.display = 'block';" />
... dann musst du dir auch nicht eine ganze Collection von Elementen aus dem Baum suchen, sondern mit getElementById() nur das eine.
Im Firefox klappt wie immer alles bestens.
Erstaunlich, denn der Wert 'block' ist für eine Tabelle nicht der richtige Wert für die 'display'-Eigenschaft; sondern 'table' (wozu aber IEs zu blöd sind).
Setze zum Anzeigen mittels Leerstring auf den Defaultwert, dann ist jeder Browser zufrieden:
document.getElementById('blubb')[0].style.display = "";
Live long and prosper,
Gunnar
Hi,
In etlichen Browsern kümmern sich deren JavaScript-Interpreter nicht um irgendwelche Phantasie-Attribute.
Kannst Du ein Beispiel nennen? Oder gerne auch mehrere, wenn es schon etliche gibt.
Warum sollten sie auch?
Z.B. weil der Browserprogrammierer es dann einfacher hat? Und weil er ohnehin nicht weiß, welches Attribut in einer neuen (offiziellen wie inoffiziellen) (X)HTML-Version mal existieren wird? Ich kann nur mutmaßen. Wenn Du es konkret weißt ...
Ich kenne bislang nur den Fall, daß wenige Browser - also: IE - sich sperren, wenn man *existierende* Attribute - konkret: NAME - dort einsetzt, wo man laut HTML-Standards nicht darf. Aber selbst der IE kommt ansonsten mit *wirklichen* Phantasie-Attributen gut klar.
Schlimmer hingegen: Phantasie-Elemente (z.B. CANVAS) können wenige Browser - also: IE - überhaupt nicht mit JS/DOM erfassen. Aber ich kenne sonst keinen Browser, der sich da sperrt (also auch hier hätte ich eine Wissenslücke ggf. zu füllen).
Gruß, Cybaer
Hallo Bertie,
Die Tabelle:
<table width="300" border="0" cellspacing="0" cellpadding="3" name="blubb" style="display:none;">
Der Radio Button:
<input type="radio" name="status" value="test" onClick="document.getElementsByName('blubb')[0].style.display = 'block';" />
... Wie Gunnar schon sagte; "block" ist keine passende Display-Eigenschaft für Tabellen, entzeihe die Display-Eigenschaft 'none' durch Zuweisung einer leeren Zeichenkette und stelle so den Default-Status für Tabellen wieder her, dann passt es auch auf alle Browser.
Im Firefox klappt wie immer alles bestens. Nur der IE will die Tabelle einfach nicht einblenden. Kann mir jemand einen Tipp geben woran das liegt?
Ja, der IE mag es auch nicht, wenn eine Tabelle, die selbst anfänglich auf display:none
steht, nachträglich wieder eingeblendet werden soll. Es geht hingegen, wenn du die Tabelle erst aufgeklappt hast. Dann lässt sie sich im IE auch zu- und anschließend wieder aufklappen.
Du könntest die Tabelle also automatisch zuklappen, nachdem sie erst einmal gerendert wurde, entweder onload der Seite oder in einem Funktionsaufruf, der im Quellcode kurz nach der Tabelle steht. Dann kannst du sie später auch wieder auf- und zuklappen. Das hätte dann auch den Vorteil, dass Leute in deren Browser Javascript deaktiviert ist, die Inhalte auch sehen könnten.
Oder du weist das display:none
nicht dem TABLE-Element, sondern z.B. einem umgebenden DIV-Element zu und klappst dieses durch Klick auf den Radiobutton auf. Dann kucken Leute ohne Javascript aber in die Röhre.
Mit den invaliden Attributen im TABLE-Element hat die Zickerei des IE zwar nichts zu tun aber schön finde ich sie auch nicht.
Gruß Gernot