---
title: "Problem med setTimeout"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/91261-problem-med-settimeout"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Quazzo"
published: "2003-11-26T08:52:16.000Z"
updated: "2003-11-28T17:45:36.000Z"
replies: 9
views: 358
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/91261-problem-med-settimeout"
---

# Problem med setTimeout

## #1 — Quazzo, 2003-11-26T08:52Z

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);
}
```

Permalänk: https://www.webforum.nu/p/91261

## #2 — Jesper T, 2003-11-26T10:17Z

vad är "timerID"? Det ända du gör är väl att sätta en variabel?

Permalänk: https://www.webforum.nu/p/1214068

## #3 — Quazzo, 2003-11-26T10:18Z

Bara en variabel så jag senare kan köra en 
clearTimeout(timerID);

om det blir nödvändigt.

Permalänk: https://www.webforum.nu/p/1214070

## #4 — Jesper T, 2003-11-26T10:32Z

Detta funkar för mig:

```
 <script>
function delay(Id){
setTimeout('hideLayer(\''+Id+'\')', 1000);

}
function hideLayer(Id){
document.getElementById(Id).style.display='none';	
}
</script>
```

Permalänk: https://www.webforum.nu/p/1214077

## #5 — Jesper T, 2003-11-26T10:32Z

Dj-vlar, forumet gör om kåden.

Permalänk: https://www.webforum.nu/p/1214079

## #6 — Jesper T, 2003-11-26T10:33Z

setTimeout('hideLayer(\\\_''+Id+'\\\_')', 1000);
Utan underscore!

Permalänk: https://www.webforum.nu/p/1214081

## #7 — Quazzo, 2003-11-26T10:53Z

Du menar att man ska skriva:

setTimeout('hideLayer(''+Id+'')', 1000);

Dvs med två enkelfnuttar runt + Id + ?

Permalänk: https://www.webforum.nu/p/1214094

## #8 — Jesper T, 2003-11-26T10:59Z

Så som jag skrivit (enkelfnutt,hideLayer(,backslash,enkelfnutt,enkelfnutt, + Id +, enkelfnutt, backslash, enkelfnutt,), enkelfnutt, komma 1000);

Permalänk: https://www.webforum.nu/p/1214096

## #9 — Quazzo, 2003-11-26T11:06Z

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?

Permalänk: https://www.webforum.nu/p/1214100

## #10 — magnus_fossum, 2003-11-28T17:45Z

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

Permalänk: https://www.webforum.nu/p/1215272

---

Tråden på webben: https://www.webforum.nu/amne/javascript/91261-problem-med-settimeout
