webForumDet fria alternativet
Logga in / Bli medlem

onresize()

JavaScript

5 svar · 313 visningar · startad av Web-Tor

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

Kör man nedanstående kod (i Explorer 6) så alertas "undefined", "DIV", "undefined".
Jag skulle ju gissat på att det skulle varit "BODY", "DIV".

Någon som har lust att förklara varför det blir som det blir?

<html>
	<head>
		<title></title>
		<script type="text/javascript">
			function resizeMenu(obj){
				alert(obj.tagName)
			}
		</script>
	</head>
	<body onresize="resizeMenu(this);">
		<div onresize="resizeMenu(this)" style="height:100%;width:100%;border:1px solid #234">DIV</div>
	</body>
</html>
Medlem sedan dec. 20025 483 inlägg
#2

Jag är inte heller helt hundra på varför det blir så. this i <body> refererar i alla fall till fönstret som sådant (window), därav dina undefined. Varför du får två stycken undefined, vet jag dock inte.

Medlem sedan aug. 20039 340 inlägg
#3

Följande kod rätar ut frågetecknen:

<html>
<head>
<title></title>
<script type="text/javascript">

function resizeMenu(obj){
	ra=[];
	for (i in obj){
		ra.push(i + "\t" + obj[ i])
	}
	alert(ra.sort().join("\n"))
}
</script>
</head>
<body onresize="resizeMenu(this);">
<div onresize="resizeMenu(this)" style="height:100%;width:100%;border:1px solid #234">DIV</div>
</body>
</html>

Peter S skrev:

Jag är inte heller helt hundra på varför det blir så. this i <body> refererar i alla fall till fönstret som sådant (window), därav dina undefined.

Stämmer! window inte har något tagName-attribut, därav undefined. Även om det finns ett onresize-attribut till body-taggen i html, så hamnar funktionen hos window-objektet i javascript. Du ser också i alerten som koden ovan producerar att (window.)onresize syns som ett attribut.

Peter S skrev:

Varför du får två stycken undefined, vet jag dock inte.

Det beror nig på att det triggas flera onresize-events. Kanske ett när sidan är färdigkalkylerad, eller att du hann ändra storleken flera steg, som sedan skyfflas på varandra.

Medlem sedan dec. 20025 483 inlägg
#4

nitro2k01 skrev:

Det beror nig på att det triggas flera onresize-events. Kanske ett när sidan är färdigkalkylerad, eller att du hann ändra storleken flera steg, som sedan skyfflas på varandra.

Att det triggas flera onresize-händelser är ju uppenbart. Frågan är varför onresize triggas två gånger för fönstret, men endast en gång för <div>en.

Efter en stunds funderande beror det sannolikt på att händelsen propageras uppåt i hierarkin. När fönstrets dimensioner ändras smäller först body.onresize av. Därefter följer div.onresize vilket även medför att body.onresize triggas återigen.

Medlem sedan nov. 200013 890 inlägg
#5

Peter S skrev:

Efter en stunds funderande beror det sannolikt på att händelsen propageras uppåt i hierarkin. När fönstrets dimensioner ändras smäller först body.onresize av. Därefter följer div.onresize vilket även medför att body.onresize triggas återigen.

Testa att ta bort div-taggen helt. Det blir ändå två body.onresize. :l

Medlem sedan dec. 20025 483 inlägg
#6

Hm, då vet jag inte vad det kan vara. Kanske är det som nitro säger:

nitro2k01 skrev:

Kanske ett när sidan är färdigkalkylerad

Efter en stunds googling, fann jag detta. Men det verkar förutsätta medlemskap ;)

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