mmofacts.com

Problem mit der Gecko-Engine

gepostet vor 11 Jahre, 10 Monate von KoMtuR
Hallo,
Ich hab derzeit ein Problem, worauf ich noch keine passende Lösung gefunden habe. Ich lasse meinen Chat mit den Script.aculo.us Effekten aus und einblenden, aber dies nur am Rande. Das eigentliche Problem ist die Renderengine der Mozilla-Browser. Mein Chat hat eine InputBox und die Gecko-Engine setzt irgendwie in diese inputbox (oder drum herum) ein Div mit der Klasse "anonymous-div". Das Problem ist nun, dass ich irgendwie den ganzen Chat, der in einem Div liegt, nur ausblenden will, wenn der Mauszeiger wirklich nicht mehr auf diesem Div liegt.
derzeit löse ich das so:

hideChat: function (event) {
var element = event.relatedTarget;
console.log(element);
if(element && element.className !="anonymous-div") {
if(!element.up('#widget_chat')) {
if(this.showing) {
new Effect.Fade('chatElements', {afterFinish: this.setHide.bindAsEventListener(this)});
}
}
}
}
Das Problem ist, dass ich nichtmal das Div abfangen kann, weil schon element.className eine Exception wirft. Es stört zwar nicht weiter, aber es ist nicht wirklich toll, wenn der Javascript Exceptions wirft.
Hatte jemand schon ein ähnliches Problem und weiß vielleicht eine Antwort drauf?
PS.: Das div wird nicht im Firebug über den Dom-Browser angezeigtt, aber wenn ich die console.log Meldungen anzeigen lasse, dann zeigt er mir dieses Div an. Es scheint irgendein Überbleibsel zu sein, was mich aber irgendwie nervt.
gepostet vor 11 Jahre, 9 Monate von Nuky
Solang du ein Element nicht löschst, muss es immer auch im DOM - Browser verfügbar sein - weiß nicht, wie Script.aculo.us das löst, aber sie werden wohl auch display auf none setzen.
Wenn du keine exceptions haben willst, versuchs mit try{} catch{}.
Sicher das relatedTarget die richtige Eigenschaft für dich ist?
developer.mozilla.org/en/docs/DOM:event.relatedTarget
gepostet vor 11 Jahre, 9 Monate von KoMtuR
try...catch....so simpel kann eine Antwort sein
Die Funktion hideChat ist am Mouseout-Event vom Div mit der ID "widget_chat" gekoppelt. Da in diesem Div dann halt mehrere Sachen liegen, die den chat ausmachen, wird im firefox (weiß nicht, obs in anderen browsern auch war) immer ein Mouseout-Event gefeuert, wenn ich diverse Unterlemente überquerte. Deswegen auch dieses prüfen mit der Funktion up, ob das Element vielleicht in dem Div liegt.
Aber mit try..catch sollte es ja zu unterbinden sein
Danke dir, soweit hab ich natürlich nicht gedacht (eher noch nie in javascript nur ein Gedanke an try..catch verschwendet )
PS.: Das div-Element, was ich da meine, ist speziell von der Gecko-Engine erstellt. Da der DOM-Browser von Firebug sicherlich auch nur Funktionen von dieser Engine nutzt, wird das div wohl einem verborgen bleiben.

Auf diese Diskussion antworten