Probleme mit Timeout
Kd-one
- javascript
Ich rufe über folgendes Script einen Layer auf:
<script language="JavaScript" type="text/javascript">
<!--
function show_it(id)
{
if(window.opera || (document.getElementById && !document.all))document.getElementById(id).style.visibility = 'visible';
else if(document.all)document.all[id].style.visibility = 'visible';
else if(document.layers)document.layers[id].visibility = 'show';
}
function hide_it(id)
{
if(window.opera || (document.getElementById && !document.all))document.getElementById(id).style.visibility = 'hidden';
else if(document.all)document.all[id].style.visibility = 'hidden';
else if(document.layers)document.layers[id].visibility = 'hide';}
//-->
</script>
Und über die Eventhandler onMouseover und onMouseOut im Div lasse ich den Layer anzeigen, solange sich die Maus auf dem Layer befindet.
Soweit, sogut. Funktioniert auch alles prächtig in allen Browsern, ausser NN4.*, da dieser keine Eventhandler in Div´s interpretieren kann.
Nur bei Mozilla tritt ein seltsames Phänomen auf:
Wenn man mit der Maus schnell über die Links fährt, beginnt der Layer fürchterlich zu flackern.
Ich vermute, daß er das Überfahren eines Links als MouseOut interpretiert.
Deshalb versuchte ich, die Funktion hide_it(div_Menu) über einen Timeout aufzurufen, was aber zu einem JS-Error führte:
Der Aufruf:
onMouseOut="window.setTimeout('hide_it(divMenu)',500);"
Die Fehlermeldung:
'document.all[...].style' ist null oder kein Objekt.
Irgendwie krieg ich das nicht auf die Reihe, ohne Timeout geht´s und mit gibt´s plötzlich einen Error.
Kann mir da wer weiterhelfen?
Gruß
Kurt
hallo
onMouseOut="window.setTimeout('hide_it(divMenu)',500);"
ich denke da kann ich helfen:
1. mit set timeout kann man meines wissens nach keine variablen übergeben. das heist du bekommst id == undefined und ich denke da weis dann deine funktion nicht mehr weiter.
gib einen stringals parameter fürhideit ein, zum maskieren von doppelten und dreifachen " und ' möchte ich mich aus gegebenen anlass nicht äußern...
(dafür folgender link:http://forum.de.selfhtml.org/archiv/2002/1/1849/#m10623 :)
(zum nachlesen:http://selfhtml.teamone.de/javascript/objekte/window.htm#set_timeout)
-RB-
________________________________________________
wer rechtschreibfehler findet, darf sie behalten
Hi RB.
Irgendwie kann ich dir nicht folgen.
Ok, daß ich keine Variable mit dem Timeout übergeben kann ist mir inzwischen klar, aber was meinst du mit dem Maskieren von Quotes? Brauch ich in dem Fall doch nicht, oder hab ich da was falsch verstanden?
Ich denke, am besten erklärst du es mir mal für ganz dumme, damit ich auch begreife, was du meinst. Ich bin in der Materie noch Anfänger, also bitte nicht zu technisch. :-)
Ich hab mal übergangsweise, während der Server down war,versucht, die Funktion in eine Übergeordnete Funktion einzupacken, die den Timeout auslöst. Hat aber nicht funktioniert, gleiche Fehlermeldung.
Dann hab ich die Variable direkt ins Script geschrieben. da sowieso nur ein Link angesprochen wird, ist es ja nicht unbedingt nötig, die Variable mit dem Link zu übergeben.
Bei beiden Varianten dasselbe Ergebnis. Schön langsam verzweifle ich mit dem Problem.
Gruß
Kurt
PS.: Ich hab die URL zur Problemseite mal unten eingefügt, um dem Layer, der beim Link "NAVIGATION" eingeblendet wird, geht´s. Der sollte sich beim Verbergen ein wenig Zeit lassen.
Vielen Dank, habe die Lösung selbst gefunden.
Ich habe in die Funktion eine while-Schleife eingebaut, die mir die nötige Verzögerung verschafft.
<script language="JavaScript" type="text/javascript">
<!--
function show_it(id)
{
if(window.opera || (document.getElementById && !document.all))
document.getElementById(id).style.visibility = 'visible';
else if(document.all)
document.all[id].style.visibility = 'visible';
else if(document.layers)
document.layers[id].visibility = 'show';
}
function hide_it(id)
{
i=0;
while(i<1000)
{
i=i+1;
if(window.opera || (document.getElementById && !document.all))
document.getElementById(id).style.visibility = 'hidden';
else if(document.all)
document.all[id].style.visibility = 'hidden';
else if(document.layers)
document.layers[id].visibility = 'hide';
}
}
//-->
</script>
Gruß
Kurt