/BROWSER: Darstellungsfehler im Opera, Self-Artikel
Schuer
- javascript
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
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
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
Hi,
WTF is Mudguard? I am MudGuard, not Mudguard ;-)
ein ganz faszinierender Handle, auf den man in der Tat stolz sein darf.
Gruss,
Ludger
WTF is Mudguard? I am MudGuard, not Mudguard ;-)
Entschuldige! ;-) Und danke vielmals auch für deine Hilfe.
Viele Grüße!
_ds
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
Grundlage für Zitat #151.
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
document.body.parentNode.style.backgroundColor = 'transparent';
Ganz großes Tennis! 1000 Dank für die tolle Hilfe :-)
Viele Grüße!
_ds
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
document.body.parentNode.style.backgroundColor = 'transparent';
Warum so umständlich? Versteht Opera
document.documentElement.style.backgroundColor = "transparent";
nicht?
Gruß
Avalon
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
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