Zum Inhalt springen

T3_onloadWrapper() - stört TMENU im IE

Erstellt am 4. Mai 2007 · 6 Antworten · letzte Antwort am 7. Mai 2007

Tags: JavaScript & AJAX, Frage

Dirk1 ·

Hallo,

weiss jemand, was T3_onloadWrapper im einzelnen treibt?
Ich habe ein gut funktionierendes TMENU - 2.Ebene aufklappend ohne T3_onloadWrapper.

Die Extension JW_Calendar schreibt diese Funktion nun aber in den body-tag.
Wahrscheinlich für die tool-tips - das ist mir an sich egal.

Nur scheint diese Funktion nun in die hover-Effekte einzugreifen. Jedenfalls flimmert das Untermenu dadurch unschön - aber nur im IE.

Wie kann ich nun T3_onloadWrapper mitteilen, dass er das TMENU nicht anzufassen hat?

Gibt es da überhaupt Optionen?

Vielen Dank fürs lesen und für alle Antworten.

Dirk

einpraegsam.​net ·

Ein Problem das häufig auftritt ist, das mehrere Extensions im Body Tag geladen werden müssen. Hierfür gibt es eine Erweiterung die da Abhilfe schafft.

Ein TMENU ist jedoch ausschließlich ein Textmenu und wie du daraus TMENULAYERS gemacht hast weiß ich nicht (hast du ja auch nicht geschrieben)...

just2b ·
wunschtacho schrieb

Ein TMENU ist jedoch ausschließlich ein Textmenu und wie du daraus TMENULAYERS gemacht hast weiß ich nicht (hast du ja auch nicht geschrieben)...

könnte ja sowas wie ich mit den CSS-TS-Menüs gemacht habe sein...

nun ich würde mal das js analyisieren was da aufgerufen wird und vermutlich muss man das umschreiben... aber da ist viel try & error ..

georg

Dirk1 ·

Vielen Dank Euch beiden.

Mir ist nicht ganz klar, was TMENULAYERS sind.
Die verschiedenen Ebenen im TMENU?

Nun, die benutze ich natürlich.
Es handelt sich um (2) verschachtelte Listen, die ich per CSS formatiere.

Problem macht natürlich hier der IE, da er hover: nur über echte links beherrscht.
Dazu habe ich im weiten Netz eine, wie ich finde recht elegante Lösung gefunden.

Man kann dabei den W3C-Standard beibehalten und benötigt dennoch kein Java-script. Und wenn der IE sich eines Tages korrekt verhält (IE 7?) muß nichts geändert werden.

Wenn's interessiert poste ich gerne mehr dazu.

Und dabei fällt mir ein, dass ich diesen T3_onloadWrapper() dabei vielleicht überhaupt nicht brauche. Und etwas anderes habe ich momentan im body-tag auch nicht stehen.

Vielleicht kann man den tag irgendwie vollständig entfernen?

Gruß
Dirk

Dirk1 ·

So,

ich bin jetzt etwas schlauer.
nicht T3_onloadWrapper() ist der Übeltäter.
Das ist nur der Transportcontainer.

Problem ist die Extension Overlib. Und zwar die JS-Funktion mouseMove (e).
Die sorgt z.B. bei JW_Calender dafür, dass der tooltips-text sich mit bewegt, wenn man die Maus bewegt.

Da finde ich das auch sinnvoll. Aber offensichtlich läuft das Ding immer und ständig - das finde ich schlecht.

Wie erreicht man es, dass mouseMove nur bei bestimmten Objekten aktiv wird?

Das wird wahrscheinlich schwierig, ohne im Source-Code von Overlib herum zu wühlen.

Oder, hat vielleicht noch jemand eine andere Idee?

Dirk

just2b ·

Hallo,

weiß nicht ob overlib schon geladen wird wenns installiert ist oder erst mit jw_cal. wenn zweiteres, dann vermutlich erst wenn du dieses einbindest bzw dessen TS. Dh wenn du Glück hast, hast du den Effekt bei richtiger Einbindung (=nicht auf der rootseite) nur auf der Seite mit jw_cal

sonst wirst an ner modifikation von overlib nicht rumkommen schätz ich

georg

Dirk1 ·

Jippi, ich habs.

Alles halb so wild.

Man kann auf das menu-element einen event-handler einrichten, der das weiterreichen an den globalen handler unterbricht.

Stichwort "CancelBubble=true"

Dazu reichen ein paar klitzekleine Javascript Funktionen:

function cancelMousemove(e)
{
	if (!e) var e = window.event //MSIE
        e.cancelBubble=true;
//          alert("stopp");
        e.stopPropagation();
        return true;
}
function initNoMousemove()
{
	el = document.getElementById("header")
//   alert("initNoMousemove");
	if (el.addEventListener) {
		el.addEventListener("mousemove", cancelMousemove, false);
//                alert("Mozzilla");
	}
	else if (el.attachEvent){
//                alert("Microsoft");
		el.attachEvent("onmousemove", cancelMousemove);
	}
	return true;
}

Die habe ich in eine externe Datei gepackt, die im Template über
page.includeJS eingebunden wird.

Ausserdem braucht es noch die extension
Body onEvents Javascript, damit mein

initNoMousemove ();

auch aufgerufen wird.

Ein von Typo3 losgelöstes Beispiel habe ich in diesem Forum aufgeschrieben.
http://xhtmlforum.de/45740-events-vererben-ueberladen.html

Vielleicht hilfts mal jemandem.

Dirk