webForumDet fria alternativet

onresize()

5 svar · 313 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200011 794 inlägg
#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>
Peter SMedlem sedan dec. 20025 484 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.

nitro2k01Medlem sedan aug. 20037 630 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.

Peter SMedlem sedan dec. 20025 484 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.

Web-TorMedlem sedan nov. 200011 794 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

Peter SMedlem sedan dec. 20025 484 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 ;)

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