Schuer: /BROWSER: Darstellungsfehler im Opera, Self-Artikel

Hallo,

ich habe hier einen Opera-Bug vorliegen, den ich nicht nachvollziehen kann. Auf der Testseite zu sehen: http://www.fb07.de/temp/opera.html

Es geht darum, eine Tabellenzeile durch Änderung der CSS-Klasse per JS einzufärben, wenn die Checkbox davor aktiviert wird. Vorbild war Mudguards Artikel Dynamisches HTML: Datensatzauswahl aus Tabelle mit Fullrowselect, der allerdings das Label-Element für die Darstellung von Inhalten verwendet, und bei dem der Fehler im Opera nicht auftaucht.

Habt ihr eine Idee, wie ich den Fehler vermeiden/umgehen könnte?

Viele Grüße!
_ds

  1. Auf der Testseite zu sehen: http://www.fb07.de/temp/opera.html

    Kleiner Nachtrag zur Problembeschreibung: Die Zeile wird ja eingefärbt, allerdings nicht vollständig, sondern nur unterhalb des Textes. Schiebt man das Browserfenster kurz aus dem Bild oder aktiviert wahllos einige andere Zeilen, wird die Darstellung korrigiert und das gewünschte Ergebnis erreicht.

    Sehr eigenartig, und wie gesagt: Mudguards Version im verlinkten Artikel ist davon nicht betroffen.

    Viele Grüße!
    _ds

    1. Hi,

      Auf der Testseite zu sehen: http://www.fb07.de/temp/opera.html
      Kleiner Nachtrag zur Problembeschreibung: Die Zeile wird ja eingefärbt, allerdings nicht vollständig, sondern nur unterhalb des Textes. Schiebt man das Browserfenster kurz aus dem Bild oder aktiviert wahllos einige andere Zeilen, wird die Darstellung korrigiert und das gewünschte Ergebnis erreicht.

      Kann ich in 7.53 und 8.00 nachvollziehen.

      Opera braucht manchmal den expliziten Hinweis, daß neu gemalt werden soll.
      Probier mal, die Zeile per display:none aus- und sofort wieder einzublenden (bei meinen Problemen hatte visibility nicht ausgereicht).
      (um ein Flackern in anderen Browsern zu vermeiden, ggf. mit if (window.opera) nur für Operas anwenden).

      Sehr eigenartig, und wie gesagt: Mudguards Version im verlinkten Artikel ist davon nicht betroffen.

      WTF is Mudguard? I am MudGuard, not Mudguard ;-)

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

        WTF is Mudguard? I am MudGuard, not Mudguard ;-)

        ein ganz faszinierender Handle, auf den man in der Tat stolz sein darf.

        Gruss,
        Ludger

      2. WTF is Mudguard? I am MudGuard, not Mudguard ;-)

        Entschuldige! ;-) Und danke vielmals auch für deine Hilfe.

        Viele Grüße!
        _ds

  2. hi,

    ich habe hier einen Opera-Bug vorliegen, den ich nicht nachvollziehen kann.

    Problem nachvollziehbar - und in anderem Rahmen auch schon öfters selber erfahren.
    Opera "vergisst" gerne, alle betroffenen Teile eines Dokumentes neu zu rendern, wenn eine dynamische Style-Änderung per Javascript stattfindet.

    Habt ihr eine Idee, wie ich den Fehler vermeiden/umgehen könnte?

    Bring ihn dazu, etwas gründlicher darüber nachzudenken, welche Teile er neu zu rendern hat.
    Füge mal in deine Funktion highlight() vor dem return noch die Zeile
    document.body.style.backgroundColor = '#FFFFFF';
    ein - und staune: Obwohl du dem body nur die Hintergrundfarbe zugewiesen hast, die er eh schon hatte, ist der Bug-Effekt verschwunden.

    Ist natürlich etwas unschön, weil du jetzt die Hintergrundfarbe, die body per Stylesheet bekommen hat, nochmal hart kodiert im JS stehen hast - und das also logischerweise bei Änderung des CSS auch hier eine Anpassung erfordern würde.

    Weitere Möglichkeit, um das zu umgehen: Nicht body, sondern html eine Hintergrundfarbe zuweisen - beispielsweise transparent, um weniger Unverträglichkeiten zu haben:
    document.body.parentNode.style.backgroundColor = 'transparent';
    löst das Problem ebenfalls. Ist vielleicht etwas besser zu handhaben - weil wie oft vergibt man in Stylesheets eine Hintergrundfarbe für html? Kommt bei mir jedenfalls so gut wie nie vor - also kann ich sie in solchen Fällen auch problemlos per JS auf transparent setzen.

    Das ist grundsätzlich die Methode, die ich in solchen Fällen immer anwende: Opera checkt's nicht gleich, also ziehe ich ihm kurz einen mit dem Zaunpfahl über, als kleinen Denkanstoss ...

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      document.body.parentNode.style.backgroundColor = 'transparent';

      Ah sehr cool, dieses Problem hat mir auch schon einige Kopfzerbrechen bereitet, vor allem in einem Administrationsmenü, welches _nur_ im Opera verwendet wird ist das ziemlich uncool. Danke für die Lösung.

      Grüße
      Jeena Paradies

    2. document.body.parentNode.style.backgroundColor = 'transparent';

      Ganz großes Tennis! 1000 Dank für die tolle Hilfe :-)

      Viele Grüße!
      _ds

    3. Hi,

      Weitere Möglichkeit, um das zu umgehen: Nicht body, sondern html eine Hintergrundfarbe zuweisen - beispielsweise transparent, um weniger Unverträglichkeiten zu haben:
      document.body.parentNode.style.backgroundColor = 'transparent';

      Ah ja, das werde ich mal mit meinem Opera-Problemfall probieren (ich hatte damals die Tabelle aus- und wieder eingeblendet).

      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.
    4. document.body.parentNode.style.backgroundColor = 'transparent';

      Warum so umständlich? Versteht Opera

      document.documentElement.style.backgroundColor = "transparent";

      nicht?

      Gruß
      Avalon

      1. Hallo Avalon.

        document.body.parentNode.style.backgroundColor = 'transparent';

        Warum so umständlich? Versteht Opera

        document.documentElement.style.backgroundColor = "transparent";

        nicht?

        Doch, er versteht es.

        Einen schönen Montag noch.

        Gruß, Ashura

        --
        Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
        30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
        Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
        [Deshalb frei! - Argumente pro freie Software]
      2. hi,

        Warum so umständlich?

        weil das nur so kurz dahergeschrieben war, um dem problem, eine hintergrundfarbe für body anzugeben, die dann passend zum CSS sein müsste, zum umgehen.

        Versteht Opera
        document.documentElement.style.backgroundColor = "transparent";
        nicht?

        doch, klar. viele wege führen nach norwegen.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }