[JS]Wat gaat hier mis ?

Pagina: 1
Acties:

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:45
Kheb een javascriptje gemaakt waarmee ik menuutjes onmouseover tevoorschijn laat komen. Bij een mouseout gaat een timeout in werking, die na 1sec het menuutje laat verdwijnen. Als ik binnen de 1sec over de menuknop ga, reset ik de timeout, en blijft het menuutje staan, totdat ik van de knop afga, enz. Het werkt alleen niet helemaal. kheb nu dit:

code:
1
2
3
4
<td onmouseover=
       "ShowLayer('nieuws');clearTimeout('timeout1')"
    onmouseout=
        "timeout('nieuws','timeout1');"></td>


dit is de javascript-code:
code:
1
2
3
4
5
6
var timeout1;
var timeout2;

function timeout(layername,timeout) {
    timeout=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
}


Ik krijg geen foutmeldingen ofzo, de timeout-reset werkt gewoon niet. Ziet iemand het probleem ?

[ Voor 11% gewijzigd door Dr_Frickin_Evil op 25-01-2003 19:44 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

jah, je gebruik timeout zowel als functie als als variabele naam.
code:
1
2
3
function timeout(layername,theTimeout) {
    theTimeout=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
}

plus er moet een closing bracket bij

verder zou het best kunnen dat die theTimeout alleen binnen deze functie bestaat tenzij je hem erbuiten declareerd

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:45
Die closing bracket had ik wel, maar was ik vergeten mee te copy/pasten. Kheb de variabele naam al verandert, maar dat werkt niet.

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

[google=javascipt settimeout cleartimeout] ik kan het zosnel ook niet vinden.... wellicht kun je een timeout niet op deze manier toewijzen aan een string...

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 17:43
Spider.007 schreef op 25 January 2003 @ 19:18:
[google=javascipt settimeout cleartimeout] ik kan het zosnel ook niet vinden.... wellicht kun je een timeout niet op deze manier toewijzen aan een string...
natuurlijk is het moeilijk om ergens naar te zoeken zonder te weten hoe het heet.

hoe kun je nou naar setTimeout zoeken als je timeout zoekt, en helaas is google zo fijn om niet settimeout zelfs te negeren als je naar timout zoekt, omdat er geen woorden aan je searchstring vast mogen zitten. beetje loos argument dus.

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

OnTracK schreef op 25 januari 2003 @ 19:23:
[...]

natuurlijk is het moeilijk om ergens naar te zoeken zonder te weten hoe het heet.

hoe kun je nou naar setTimeout zoeken als je timeout zoekt, en helaas is google zo fijn om niet settimeout zelfs te negeren als je naar timout zoekt, omdat er geen woorden aan je searchstring vast mogen zitten. beetje loos argument dus.
<td onmouseover=
"ShowLayer('nieuws');clearTimeout('timeout1')"
onmouseout=
"timeout('nieuws','timeout1');"></td>

function timeout(layername,timeout) {
timeout=window.setTimeout('HideLayer(\''+layername+'\')', 1000);

fyi is timeout geen commando ofzo; dus daar zoeken we ook helemaal niet naar :O

[ontopic]
Haal anders die "window." eens weg?
[/ontopic]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Volgens mij wordt die clearTimeout uitgevoerd in de gehele scope en zijn de variabelen die je set alleen geldig in de functie waarin je ze zet. Probeer eerst eens timeout1 in het document te declareren: var timeout1; Dan weet je of het daar aan ligt.

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:45
timeout1 en timeout2 heb ik beiden al als variabele bovenaan de js-file gedeclareerd, was ik vergeten te zeggen in de openingspost.

Oja, dit werkt overigens wel:
code:
1
2
3
4
5
6
function timeoutLayer1(layername) {
    timeout1=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
    }
function timeoutLayer2(layername) {
    timeout2=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
    }

Maw, kheb hier dus gewoon een aparte functie voor beiden timeouts gemaakt, maar das niet zo netjes/mooi natuurlijk :(

[ Voor 60% gewijzigd door Dr_Frickin_Evil op 25-01-2003 19:45 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Dr_Frickin_Evil schreef op 25 January 2003 @ 19:44:
timeout1 en timeout2 heb ik beiden al als variabele bovenaan de js-file gedeclareerd, was ik vergeten te zeggen in de openingspost.

Oja, dit werkt overigens wel:
code:
1
2
3
4
5
6
function timeoutLayer1(layername) {
    timeout1=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
    }
function timeoutLayer2(layername) {
    timeout2=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
    }

Maw, kheb hier dus gewoon een aparte functie voor beiden timeouts gemaakt, maar das niet zo netjes/mooi natuurlijk :(
werkt het, dan werkt het >:) Verder moet je dit soort info voortaan direct in je openingspost vermelden zodat we niet telkens hetzelfde hoeven te antwoorden als wat je eigenlijk zelf al geprobeerd hebt :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 17:43
Spider.007 schreef op 25 January 2003 @ 19:33:
[...]
fyi is timeout geen commando ofzo; dus daar zoeken we ook helemaal niet naar :O
inderdaad, dat zij ik nou juist tegen jou, de topicstarter wist dit niet, en kon dus onmogelijk met google zoeken naar settimeout (hij wist helemaal niet dat deze functie bestond)

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Verwijderd

Wacht eens, je ziet zie ziet die dingen als strings: clearTimeout('timeout1').
Volgens mij moet het dit worden:clearTimeout(timeout1);
Dat geldt dan ook voor je timeout functie:
timeout('nieuws',timeout1) moet het dan worden.

function timeout(layername,timeout) is volgens mij ook vragen om problemen.
Ik zou de variabele die je meestuurt in de functie niet dezelfde naam geven als de functie, hoewel het misschien wel zou kunnen werken (geen idee).
Dus gewoon
function timeout(layername,x)

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 16:45
hmnee, dat is het ook niet, ik snap dr echt niks van. Als ik bijvoorbeeld de functie als volgt aanmaak:
code:
1
2
3
4
function timeout(layername,theTimeout) {
    alert(theTimeout);
    theTimeout=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
    }

dan krijg ik netjes een popupje met timeout1 danwel timeout2, dus dat werkt opzich wel, maar waarom krijg ik die timeout niet gewoon gereset ???

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:26

crisp

Devver

Pixelated

Dr_Frickin_Evil schreef op 26 januari 2003 @ 04:21:
hmnee, dat is het ook niet, ik snap dr echt niks van. Als ik bijvoorbeeld de functie als volgt aanmaak:
code:
1
2
3
4
function timeout(layername,theTimeout) {
    alert(theTimeout);
    theTimeout=window.setTimeout('HideLayer(\''+layername+'\')', 1000);
    }

dan krijg ik netjes een popupje met timeout1 danwel timeout2, dus dat werkt opzich wel, maar waarom krijg ik die timeout niet gewoon gereset ???
Je kent de timeout toe aan een variabele theTimeout, en niet aan de variabele die je als string meegeeft als parameter.
Met meerdere timeouts kan je beter met een globale array werken:
JavaScript:
1
2
3
4
5
6
7
8
9
10
var theTimeout = new Array();
function timeout(layername,which) {
  theTimeout[which] = window.setTimeout('HideLayer(\''+layername+'\')', 1000);
}
function cleartimer(which) {
  if (theTimeout[which]) {
    clearTimeout(theTimeout[which]);
    theTimeout[which] = null;
  }
}

Intentionally left blank


  • djluc
  • Registratie: Oktober 2002
  • Nu online
Misschien volgende keer een duidelijkere topic-titel? ;)
Pagina: 1