Problem mit for und Table-Elementen
mewX
- javascript
0 JürgenB0 Axel Richter0 JürgenB
0 Axel Richter0 mewX0 molily0 Axel Richter0 mewX
0 MudGuard
Hallo!
Ich habe ein Problem mit einer Funktion, die Bei einem Aufruf bestimmte Tabellen-Zeilen sichtbar macht (sie setzt den .style.display = "blocked"), und auf gleiche Weise auch verschwinden lässt.
Das funktioniert auch. Nur leider tauchen bei jedem Schließen der Elemente einige Leerzeilen in der Seite auf...
Demo: http://www.ptec-media.de/vm/index2.php?page=wines
Findet evtl jemand den Fehler?
Btw. hatte ich das gleiche Thema vor 1 1/2 Wochen schonmal, und da hat mir niemand geantwortet...
MfG
Hallo mewX,
unter http://de.selfhtml.org/css/eigenschaften/positionierung.htm#display findest du auch was für Tabellen. Aber achte darauf, das aus z.B. "table-row" in JS "tableRow" wird, also "-" weg und erster Buchstabe nach dem "-" groß.
Gruß, Jürgen
Hallo,
Aber achte darauf, das aus z.B. "table-row" in JS "tableRow" wird,
Sagt wer?
viele Grüße
Axel
Hallo Axel Richter,
Sagt wer?
ich, und das zu Unrecht. Das habe ich jetzt mit so was wie "background-color" verwechselt. Das "-" muss bei der Eigenschaft ersetzt werden, nicht beim Wert. Sorry.
Gruß, Jürgen
Hallo,
Ich habe ein Problem mit einer Funktion, die Bei einem Aufruf bestimmte Tabellen-Zeilen sichtbar macht (sie setzt den .style.display = "blocked"), und auf gleiche Weise auch verschwinden lässt.
Tabellenzeilen können aber mit der Eigenschaft display:block nicht wirklich umgehen. Ihre normale display-value ist display:table-row.
Das funktioniert auch.
Im IE.
Nur leider tauchen bei jedem Schließen der Elemente einige Leerzeilen in der Seite auf...
Demo: http://www.ptec-media.de/vm/index2.php?page=wines
Setze für standardkoforme Browser die Eigenschaft nicht auf block, sondern auf table-row. Das quittiert der IE mit einem Fehler. Fange diesen Fehler ab.
So etwa:
function showYear(year) {
var counter = 1;
if (document.getElementById(year+"_"+counter).style.display == "none") {
for (var counter = 1; counter <= 2; counter++)
try {
document.getElementById(year+"_"+counter).style.display = "table-row";
} catch (e) {
document.getElementById(year+"_"+counter).style.display = "block";
}
} else {
for (var counter = 1; counter <= 2; counter++)
document.getElementById(year+"_"+counter).style.display = "none";
}
}
viele Grüße
Axel
Das funktioniert auch.
Im IE.
Nein, im FF, aber egal^^
So etwa:
function showYear(year) {
}
>
Vielen Dank, das funktioniert!
Mit freundlichen Grüßen
--
Cya, mewX
Hallo,
Das funktioniert auch.
Im IE.
Nein, im FF, aber egal^^
Nein, im FF kommt es ja zu der von Dir beschriebenen unerwünschten Darstellung, nachdem TR von display:block wieder auf display:none gesetzt wird, aber egal ;-))
viele Grüße
Axel
Hallo,
Setze für standardkoforme Browser die Eigenschaft nicht auf block, sondern auf table-row. Das quittiert der IE mit einem Fehler. Fange diesen Fehler ab.
Das ist unschön, sehr unschön. Was hat ein JavaScript-Fehler mit einem bestimmten Verhalten von MSIE zu tun? Nun, es ist tatsächlich schwer, an dieser Stelle zuverlässig in Erfahrung zu bringen, ob man table-row oder block setzen muss. Die try-catch-Methode jedenfalls halte ich für die schlechteste denkbare Browserweiche. Browsererkennung über bestimmte Objekte wäre zuverlässiger, aber alles andere als zukunftssicher. Ich würde das Problem daher in das Stylesheet verlagern. Sowieso sollte man Präsentationslogik und JavaScript-Logik möglichst nicht vermischen. Stattdessen ändert man die Klasse bzw. fragt ab, ob eine bestimmte Klasse bereits gesetzt ist. Die Klasse enthält dann display:table-row und für den MSIE ist mittels Conditional Comments ein Extra-Stylesheet eingebunden mit display:block.
Mathias
Hallo,
Setze für standardkoforme Browser die Eigenschaft nicht auf block, sondern auf table-row. Das quittiert der IE mit einem Fehler. Fange diesen Fehler ab.
Das ist unschön, sehr unschön. Was hat ein JavaScript-Fehler mit einem bestimmten Verhalten von MSIE zu tun?
Nichts. Jeder Client, der ...display="table-row" mit einem Fehler quittiert, bekommt ja ...display="block". Was ist daran unschön? Gut, es könnte sein, dass er dann ...display="block" trotzdem nicht sinnvoll darstellen kann. Das kann man aber mit keiner Methode verhindern.
Browsererkennung über bestimmte Objekte wäre zuverlässiger, aber alles andere als zukunftssicher.
Eben. Abgelehnt! ;-))
Ich würde das Problem daher in das Stylesheet verlagern. Sowieso sollte man Präsentationslogik und JavaScript-Logik möglichst nicht vermischen. Stattdessen ändert man die Klasse bzw. fragt ab, ob eine bestimmte Klasse bereits gesetzt ist. Die Klasse enthält dann display:table-row und für den MSIE ist mittels Conditional Comments ein Extra-Stylesheet eingebunden mit display:block.
Ja, das wäre die bessere Lösung. Eventuell liest mewX ja noch mit.
viele Grüße
Axel
Ich würde das Problem daher in das Stylesheet verlagern. Sowieso sollte man Präsentationslogik und JavaScript-Logik möglichst nicht vermischen. Stattdessen ändert man die Klasse bzw. fragt ab, ob eine bestimmte Klasse bereits gesetzt ist. Die Klasse enthält dann display:table-row und für den MSIE ist mittels Conditional Comments ein Extra-Stylesheet eingebunden mit display:block.
Ja, das wäre die bessere Lösung. Eventuell liest mewX ja noch mit.
Klar. Kann ich natürlich machen. Hab sowieso gerade mit diesen Conditional COmments ein paar Sachen für den IE berichtigt...
Danke^^
MfG
Hi,
Ich habe ein Problem mit einer Funktion, die Bei einem Aufruf bestimmte Tabellen-Zeilen sichtbar macht (sie setzt den .style.display = "blocked"), und auf gleiche Weise auch verschwinden lässt.
"blocked" ist kein gültiger Wert für display.
Zum Verstecken display auf "none" setzen.
Zum Wiederanzeigen auf "" setzen. Sprich: keinen Wert angeben, also die Deklaration löschen. Damit gilt das, was an anderer Stelle in der Kaskade definiert ist - im Normalfall für display bei tr also das, was im browserinternen Stylesheet angegeben ist - für brauchbare Browser "table-row" und für den IE "block".
cu,
Andreas