webForumDet fria alternativet

Nybörjar problem nolla en variabel

4 svar · 276 visningar · startad av Zaiman

ZaimanMedlem sedan dec. 20012 439 inlägg
#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

JojoxxMedlem sedan juni 20004 306 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);
ZaimanMedlem sedan dec. 20012 439 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";
}
}

JojoxxMedlem sedan juni 20004 306 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>
ZaimanMedlem sedan dec. 20012 439 inlägg
#5

En tackar..

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

Genererad på 519 ms · cache AV · v20260730165559-full.f96bc7eb