mewX: Problem mit for und Table-Elementen

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

--
Cya, mewX
  1. 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

    1. Hallo,

      Aber achte darauf, das aus z.B. "table-row" in JS "tableRow" wird,

      Sagt wer?

      viele Grüße

      Axel

      1. 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

  2. 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

    1. 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
      
      1. 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

    2. 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

      1. 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

        1. 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

          --
          Cya, mewX
  3. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.