tooltip, komm nicht weiter...

DocHentai

Mitglied
Hallo zusammen,

ich wollte mir ein Javascript für Tooltips basteln, hat auch funktioniert im ie aber nicht im ff. Also hab ich angefangen das Ganze umzubauen bzw. neu zu basteln und nun komm ich nicht weiter. Ich weiß wo der Fehler ist aber nicht wie ichs beheben kann...
Und ja ich weiß es gibt Tooltip-Scripts wie Sand am Meer aber backe lieber selber ;-)

Code:
<script type="text/javascript">
var tt_inhalt = new Array();

tt_inhalt["bild_1"] = 		"Der erste Satz<br>steht hier!";
tt_inhalt["bild_2"] = 		"Und oh Wunder der zweite da!";

function tooltip(ereignis) {	

	if (!ereignis && window.event) ereignis = window.event;
	
	document.getElementById("toolt").style.left = ereignis.clientX+5 + "px";
	document.getElementById("toolt").style.top = ereignis.clientY+5 + "px";
	document.getElementById("toolt").style.visibility = "visible";
} 

function tt_tip_aus() {
	document.getElementById("toolt").style.visibility = "hidden";
}

function init() {
	var zahl = 0;
	while (zahl < 2) {
		++zahl;
		document.getElementById('bild_' + zahl).onmouseover = tooltip, inhalt('bild_'+zahl);
	}
}

function inhalt(wort) {
	document.getElementById("toolt").innerHTML = tt_inhalt[wort];
	}
</script>

Hoffe mir hilft wer :-)

Danke schon mal

und schönen Gruß
 
Ich weiß wo der Fehler ist aber nicht wie ichs beheben kann...

Und wo ist der Fehler, wenn du schon weisst, wo er ist? :-)


Ersetze mal jenes:
Code:
document.getElementById('bild_' + zahl).onmouseover = tooltip, inhalt('bild_'+zahl);
durch dieses:
Code:
document.getElementById('bild_' + zahl).onmouseover = function(){tooltip(); inhalt(this.id)}
...das sollte dich ein wenig vorwärtsbringen, denn so wie du es momentan hast, werden die Funktionen sofort aufgerufen und nicht dem mouseover zugeordnet(auch wenn man dies vermuten könnte)
 
ja genau, da ist mein Fehler, du hast ihn gefunden :-)

Das die Funktion gleich aufgerufen wird, war mir klar aber ich wusste nicht wie ich das änder.

Also danke.
 
so nun hab den Code ausgetauscht mich kurz darüber gefreut, dass es im ie funktioniert und ff macht mir wieder nen Strich durch die Rechnung. Das heißt ich bin wieder da wo alles angefangen hat... :mad: ie geht ff nicht!

ich denke mir, dass es an den Klammern () liegt

Code:
tooltip()

was ich so im Netz gefunden habe hat mir keine weiteren Informationen dazu gegeben nur "beachten Sie, die Klammern nach dem Funktionsnamen müssen weggelassen werden!" :suspekt: Da würde mich interessieren warum?

Würde mich auch darüber freuen wenn ich ne kurze Erläuterung bekommen würde warum der Code so geschrieben werden muss

Code:
function(){tooltip(); inhalt(this.id)}
damit die Funktion nicht sofort aufgerufen wird.

Und natürlich interessiert es mich brennend wie ich Firefox dazu bekomme das zu machen was ich will :-)

Danke schon mal.
 
Zuletzt bearbeitet:
Hi,

werden Eventhandlern Funktionen zugewiesen, werden die runden Klammern weggelassen. Es können jedoch keine
Parameter übergeben werden.

Eine weitere Möglichkeit bieten anonyme Funktionen, z.B.
Code:
objElem.onclick = function(){ func_1(), func_2(param1, param2);}
Sie ermöglichen das Zuweisen mehrerer Funktionen, sowie die Übergabe von Parametern.

Zu deinem Problem:
Zum einen hast Du das Problem, dass Du für den FF ein Event-Objekt übergeben musst. Im Allgemeinen erfolgt
das im Eventhandler (z.B. onclick="theHandler(event);").
Weiterhin verwendest Du eine Laufvariable (zahl). Diese besitzt beim Aufruf der Funktion immer den zuletzt zuge-
wiesenen Wert (in Deinem Fall 2).

Lösung:
Erstelle mit dem Function-Objekt eine neue Funktion und weise sie dem onclick-Event zu. Wird eine Funktion
auf diese Weise erstellt, werden die dynamischen Variablem mit ihrem aktuellen Wert eingetragen.

Die init-Funktion sähe damit wie folgt aus:
Code:
function init() {
  var zahl = 0;
  while (zahl < 2) {
    ++zahl;
    document.getElementById('bild_' + zahl).onmouseover = new Function("event", "tooltip(event); inhalt('bild_"+zahl+"');");
  }
}
Ciao
Quaese
 
Hoi,

so nun hats etwas gedauert, aber bin leider nicht eher dazugekommen mir das Ganze näher zu betrachten. So funktionierts prima und ich hab auch halbwegs verstanden wie bzw. warums funktioniert. :)

Vielen Dank auch für die ausführliche Antwort, hat mir wie schon gesagt sehr geholfen.

Gruß

Doc
 

Neue Beiträge

Zurück