webForumDet fria alternativet

Timeout?

9 svar · 408 visningar · startad av Melitta

MelittaMedlem sedan sep. 2003448 inlägg
#1

Hur kommer det sig att denna inte fungerar?

function flash(cnt)	{
	var thisobj = document.getElementById(cnt)
	if(view==1){
	thisobj.style.borderColor='#EAEAEA';
	view=0;
	} else {
	thisobj.style.borderColor='#996600';
	view=1;
	}
	setTimeout("flash(cnt)",250);
}
PeeerMedlem sedan mars 20025 907 inlägg
#2
setTimeout("flash('cnt')",250);

Om du har ett element som har "cnt" som id vill säga.

JojoxxMedlem sedan juni 20004 308 inlägg
#3

Nej, men det är ett klassiskt fel. När setTimeout körs så körs det exakt så som du skriver det, d.v.s.
flash(cnt)
Och då är cnt undefined eftersom den variabeln bara lever i funktionen flash.

Alltså;

function flash(cnt)	{
	var thisobj = document.getElementById(cnt)
	if(view==1){
	thisobj.style.borderColor='#EAEAEA';
	view=0;
	} else {
	thisobj.style.borderColor='#996600';
	view=1;
	}
	setTimeout("flash('"+cnt+"')",250);
}

Så kommer flash att anropas med det som variabeln cnt innehåller vid det tillfälle som du skapar timeouten.

PeeerMedlem sedan mars 20025 907 inlägg
#4

Ahhhh.. funktionsanropet var inne i funktionen! :r

MelittaMedlem sedan sep. 2003448 inlägg
#5

Och, jag är helt vilsen (grön som ett oplockat äpple) och jag får det inte att lira, här är båda funktionerna.

function flash(cnt)	{
	var thisobj = document.getElementById(cnt)
	if(view==1){
	thisobj.style.borderColor='#EAEAEA';
	view=0;
	} else {
	thisobj.style.borderColor='#996600';
	view=1;
	}
	setTimeout("flash('"+cnt+"')",250);
} 
function doColor(cnt,func)	{
	var thisobj = document.getElementById(cnt)
	if(func=='0'){
		flash(cnt);
	} else {
		thisobj.style.borderColor = '#EAEAEA';
	}
}
JojoxxMedlem sedan juni 20004 308 inlägg
#6

Det ser inte ut att vara några fel. Så länge som view är definierad. Annars kommer du att få ett felmeddelande på det.

var view=1;
function flash(cnt)	{
	var thisobj = document.getElementById(cnt)
	if(view==1){
	thisobj.style.borderColor='#EAEAEA';
	view=0;
	} else {
	thisobj.style.borderColor='#996600';
	view=1;
	}
	setTimeout("flash('"+cnt+"')",250);
} 
function doColor(cnt,func)	{
	var thisobj = document.getElementById(cnt)
	if(func=='0'){
		flash(cnt);
	} else {
		thisobj.style.borderColor = '#EAEAEA';
	}
}
MelittaMedlem sedan sep. 2003448 inlägg
#7

Ok, lite skumt för flash stannar vi första färgbytet.

MelittaMedlem sedan sep. 2003448 inlägg
#8

Kan man föresten köra en funktion i en annan?

function bla(){ 
function bla2(){
kod
}
}
dectgapMedlem sedan sep. 20021 655 inlägg
#9

Melitta skrev:

Kan man föresten köra en funktion i en annan?

function bla(){ 
function bla2(){
kod
}
}

Ja, det går bra.
function2 i ditt exempel har då tillgång till både variabler som är definierade i sig själv och de som är definierade i function.
Funktionen function har däremot ingen aning om vad som sker i function2.

function2 kan bara anropas ifrån function.

JojoxxMedlem sedan juni 20004 308 inlägg
#10

Melitta skrev:

Ok, lite skumt för flash stannar vi första färgbytet.

En liten tankevurpa kanske. Du har ingenting som avbryter timeouten till flash. Den kommer att snurra i all oändlighet. Eftersom view är definierad globalt kommer även den variabeln att krocka om du kör 2 flash-snurror samtidigt. Men det är antagligen inget problem eftersom du egentligen bara vill köra en flash åt gången.

För att avrbryta en timeout:

mytimer=setTimeout(...); // Skapar en timeout och ger den ett handtag.
...
clearTimeout(mytimer); // Avbryter timeouten i fråga.
125 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)