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.
<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.
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.
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.