QuazzoMedlem sedan juli 2001324 inlägg Har en funktion hideLayer som jag anropar:
function delay(Id){
timerID = setTimeout("hideLayer('org')",1000);
}
Fungerar bra, men när jag däremot vill ta med mig variabeln Id in i funktionen hideLayer så fungerar det inte?
function delay(Id){
timerID = setTimeout("hideLayer(Id)",1000);
}
Jesper TMedlem sedan nov. 20017 144 inlägg vad är "timerID"? Det ända du gör är väl att sätta en variabel?
QuazzoMedlem sedan juli 2001324 inlägg Bara en variabel så jag senare kan köra en
clearTimeout(timerID);
om det blir nödvändigt.
Jesper TMedlem sedan nov. 20017 144 inlägg Detta funkar för mig:
<script>
function delay(Id){
setTimeout('hideLayer(\''+Id+'\')', 1000);
}
function hideLayer(Id){
document.getElementById(Id).style.display='none';
}
</script>
Jesper TMedlem sedan nov. 20017 144 inlägg Dj-vlar, forumet gör om kåden.
Jesper TMedlem sedan nov. 20017 144 inlägg setTimeout('hideLayer(\_''+Id+'\_')', 1000);
Utan underscore!
QuazzoMedlem sedan juli 2001324 inlägg Du menar att man ska skriva:
setTimeout('hideLayer(''+Id+'')', 1000);
Dvs med två enkelfnuttar runt + Id + ?
Jesper TMedlem sedan nov. 20017 144 inlägg Så som jag skrivit (enkelfnutt,hideLayer(,backslash,enkelfnutt,enkelfnutt, + Id +, enkelfnutt, backslash, enkelfnutt,), enkelfnutt, komma 1000);
QuazzoMedlem sedan juli 2001324 inlägg Oki, nu fungerar det bra, tack för hjälpen!
För att få med sig en variabel vidare till en funktion använder man sig alltså av
\'' + variabelnamn + '\'
Slutet är inte helt logiskt, men det är klar allt är inte logiskt första gången man gör det. Har du/ni något bra länktips som beskriver detta med variabler i funktioner?
Re: Variabel till variabel
Tjenare!
Jag tror att förklaringen är denna:
Metoden setTimeout(kodsträng,msek) innebär att kodsträngen exekveras först efter msek millisekunder. Javascript-tolken VÄNTAR INTE vid denna instruktion utan fortsätter exekvera eventuella efterföljande instruktioner i funktionen och hinner sannolikt lämna densamma innan sas. "tiden rinner ut". Mao. så anropas inte funktionen hideLayer från funktionen delay. Eftersom Id är en LOKAL variabel så är den inte definierad utanför funktionen delay.
Beroende på omständigheterna så kunde en annan lösning vara att ha en global motsvarighet till variabeln, global_Id, och skriva funktionen som
var global_Id
.
.
.
function delay(Id){
global_Id = Id // garanterar att argumentet till
// hideLayer är definierat vid anropet
timerID = setTimeout("hideLayer(global_Id)",1000);
}
eller att skippa den lokala variabeln helt och hållet:
var global_Id
.
.
.
function delay(){
timerID = setTimeout("hideLayer(global_Id)",1000)
}
Båda dessa varianter förutsätter dock att du inte behöver ändra på variabeln global_Id (tex för ett annat anrop av funktionerna) innan timeoutkoden skall exekveras.
Magnus