webForumDet fria alternativet
Logga in / Bli medlem

Nybörjar problem nolla en variabel

JavaScript

4 svar · 276 visningar · startad av Zaiman

Medlem sedan dec. 20014 239 inlägg
Trådstart#1

Hejsan alla script älskare.

Jag har en nybörjarfråga.

Jag har deklarerat en variabel utanför alla functioner, sedan i en function har jag en räknare som räknar upp denna variabel.

Hur gör jag för att återställa den variabelns urspungsvärde?

En knåpande amatör

Medlem sedan juni 20004 308 inlägg
#2

Enklast genom att skicka med variabeln som ett argument till funktionen.

function myfunc(myVar){
   myVar+=200;
   alert("Nu har vi räknat lite med värdet som skickades till funktionen och resultatet är "+myVar);
}

var a = 123;
myfunc(a);
alert("Utanför funktionen (efter anropet) är variabeln a fortfarande "+a);
Medlem sedan dec. 20014 239 inlägg
#3

Fortfarande nybörjare..

Så här har jag provat men utan resultat.
Jag förstår din tanke men i mitt fall fungerar det inte (jag gör säker fel)

var rakna = 0
function flytta(lager,rakna)
{
if (rakna < 21)
{
rakna++
document.all[lager].style.top = rakna
setTimeout("flytta('lager',rakna)
// här vill jag gör en timeout på X antal millisekunder typ setTimeout
// loopen fungerar om jag hårdkodar vilket layer som ska flyttas och inte skickar med någon parameter
}
}

function HideAll()
{
gom('Datormenu')
gom('tjanstmenu')
gom('kursmenu')
gom('infomenu')
}

function Showmenu(menu)
{
if (menu == 'Datormenu')
{
visa('Datormenu')

// Här skickar jag till functionen flytta
flytta('Datormenu','rakna')

	gom('tjanstmenu')
	gom('kursmenu')
	gom('infomenu')
	}
else if (menu == 'tjanstmenu')
	{
	gom('Datormenu')
	visa('tjanstmenu')
	gom('kursmenu')
	gom('infomenu')
	}
else if (menu == 'kursmenu')
	{
	gom('Datormenu')
	gom('tjanstmenu')
	visa('kursmenu')
	gom('infomenu')
	}
else if (menu == 'infomenu')
	{
	gom('Datormenu')
	gom('tjanstmenu')
	gom('kursmenu')
	visa('infomenu')
	}

}

function visa(layer)
{
var lager = layer
if (document.all)
{
document.all[layer].style.visibility = "visible";

}

else if (document.layers)
{
document[layer].visibility ="show";
}
}

function gom(layer)
{
if (document.all)
{
document.all[layer].style.visibility = "hidden";
}
else if (document.layers)
{
document.layers[layer].visibility ="hide";
}
}

Medlem sedan juni 20004 308 inlägg
#4

Det är en klassiker...

Har du en funktion som ser ut så här;

function myfunc(argA,argB){
// lite kod här...
}

och sedan anropar du den med;

myfunc(100,200);

och sist i functionen vill du sätta en timeout som kör funktionen igen efter 100 ms så skriver du;

setTimeout("myfunc(argA,argB);",100);

Detta gör att uttrycket "myfunc(argA,argB);" lagras och körs efter 100 ms. ... vad händer då, jo "myfunc(argA,argB)" körs ... men argA och argB är ju då odefinierade... eller hur? Det du egentligen vill göra är att sätta en timeout och sedan använda VÄRDET argA och argB, inte bara namnet på variablerna, således får du använda eval;

<script>
function flytta(lager,rakna){ 
if (rakna < 21){ 
	rakna++
	document.all[lager].style.top = rakna 
	eval("setTimeout(\"flytta('"+lager+"',"+rakna+")\",20);");
} 
} 
</script>
<div id="foo" style="position:absolute;top:0px;left:0px;">aaaaa</div>
<br>
<a href="#" onClick="flytta('foo',0);">Click me</a>
Medlem sedan dec. 20014 239 inlägg
#5

En tackar..

Tusen tack Jojoxx nu har jag lär mig något nytt idag oxå.

257 ms totalt · 4 externa anrop · v20260731065814-full.81e7e81c
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)