webForumDet fria alternativet
Logga in / Bli medlem

setTimeout och fnuttar

JavaScript

10 svar · 401 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Trådstart#1

Jag gissar att jag har fnuttarna på fel sätt eftersom det här inte funkar ('obj' is undefined):

<html>
	<head>
		<script type="text/javascript">
			function hide(obj){
				//obj.style.display='none'
				window.setTimeout("obj.style.display='none'",500);
			}
		</script>
	</head>
	<body>
		<form>
			<input type="button" value="Hide text" onclick="hide(bar)">
			<div id="bar">Text</div>
		</form>
	</body>
</html>

Så frågan är; hur sjutton ska man skriva i setTimeout?

Medlem sedan aug. 20039 340 inlägg
#2
<html>
<head>
<script type="text/javascript">
function hide (obj){
	var obj = obj;

	this.hide = function(){
		obj.style.display='none';
	}

	window.setTimeout(this.hide,500);
}
</script>
</head>
<body>
<form>
<input type="button" value="Hide text" onclick="hide(bar)">
<div id="bar">Text</div>
</form>
</body>
</html>
Medlem sedan nov. 200013 890 inlägg
#3

Okey, det finns inte något sätt att få till det utan en extra funktion?

Medlem sedan dec. 20025 483 inlägg
#4
var tmp;
function hide(obj){
    tmp = obj;
    window.setTimeout("tmp.style.display='none'",500);
}
Medlem sedan aug. 20039 340 inlägg
#5

Peter S skrev:

var tmp;
function hide(obj){
    tmp = obj;
    window.setTimeout("tmp.style.display='none'",500);
}

Jag skulle dock avråda från att använda globala variabler, eftersom om denna funktion körs två gånger med olika div'ar, så kommer den första referensen skrivas över.

Medlem sedan aug. 20039 340 inlägg
#6

Web-Tor skrev:

Okey, det finns inte något sätt att få till det utan en extra funktion?

Vad har du mot detta? Funktionen fungerar ju på samma sätt utifrån.

Medlem sedan dec. 20025 483 inlägg
#7

nitro2k01 skrev:

Jag skulle dock avråda från att använda globala variabler, eftersom om denna funktion körs två gånger med olika div'ar, så kommer den första referensen skrivas över.

Eftersom Tors exempel endast innefattade ett element, utgick jag från att det endast gällde den <div>en.

En annan variant:

function hide(obj){
    window.setTimeout(function(){obj.style.display='none'}, 500);
}
Medlem sedan aug. 20039 340 inlägg
#8

Peter S skrev:

Eftersom Tors exempel endast innefattade ett element, utgick jag från att det endast gällde den <div>en.

En annan variant:

function hide(obj){
    window.setTimeout(function(){obj.style.display='none'}, 500);
}

Om det verkligen bara gällde ett element, varför inte förenkla ytterligare?

function hide(){
    window.setTimeout("bar.style.display='none'",500);
}
Medlem sedan aug. 20039 340 inlägg
#9

Om det nu gäller en div, så funkar detta: (Förutsatt att div'en har id)

<html>
<head>
<script type="text/javascript">
function hide(objId){
window.setTimeout("document.getElementById(\"" + objId + "\").style.display='none'",500);
}
</script>
</head>
<body>
<form>
<input type="button" value="Hide text" onclick="hide('bar');">
<div id="bar">Text</div>
</form>
</body>
</html>
Medlem sedan dec. 20025 483 inlägg
#10

nitro2k01 skrev:

Om det verkligen bara gällde ett element, varför inte förenkla ytterligare?

function hide(){
    window.setTimeout("bar.style.display='none'",500);
}

Det är helt klart att föredra :)

Medlem sedan nov. 200013 890 inlägg
#11

Det kan vara olika element. Det är elementet som skickas in till funktionen som ska påverkas.

Tack för alla svar! :)

258 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)