Toon posts:

[js] Iets vreemds met event object doorsturen met settimeout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dit werkt alleen in Mozilla en consorten (popup blokkers uitschakelen aub)
Kijk hier:
http://home.hccnet.nl/m.wargers/test/settimeout%20event.htm

Ik heb een scriptje gemaakt, dat bij onmousedown twee windows opent.
Deze laten de event properties e.d. zien.
De eerste window wordt direct weergegeven.
Na 1 sec wordt een andere functie uitgevoerd. Het event object is doorgestuurd via de settimeout. In deze andere functie wordt de tweede window geopend.
Beide window laten de event properties zien, maar zoals je kunt zien als je het test laten ze niet hetzelfde zien.
Ik moest zelfs in de tweede functie een try..catch erin gooien, anders werkte het niet.

Kan iemand dit verklaren?

http://home.hccnet.nl/m.wargers/test/ctrlkey.htm
Nog een zelfde soort testje met de modifier key, de ctrlkey.
Kijk en vergelijk maar met klikken zonder en met de ctrl key.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

Je kan geen object-referenties meegeven als argument; daarbij heb ik de setTimeout in deze vorm nog in geen enkele browser werkend gezien:

setTimeout(function, msec[, arg1[, ..., argN]])

[ Voor 57% gewijzigd door crisp op 23-12-2003 14:08 ]

Intentionally left blank


Verwijderd

Topicstarter
Dit:
setTimeout(function, msec[, arg1[, ..., argN]])
Zou toch wel moeten werken in Mozilla, volgens mij.

Dit werkt ook bij mij volgens mij:
code:
1
2
3
4
5
6
7
8
9
10
<html><head><title></title>
</head>
<body>
<div id="test">test</div>
<script>
var x=document.getElementById('test');
function doe(e){setTimeout(doe2,1000,e);}
doe(x);
function doe2(e){alert(e.innerHTML);}
</script></body></html>


Ik heb denk ik wel nu een idee wat er gebeurt.
Zoals jij al zei crisp, ik stuur object referenties mee met de timer, dus het object kan gewoon veranderen voordat de functie wordt uitgevoerd na zoveel tijd.
Het event object is ook maar 1 object, die dus na xxx seconden is veranderd in een ander soort event object (met andere eigenschappen).
Ik dacht eerst dat ik gewoon lekker de eigenschappen van het oorsprokelijke onmousedown event kon nagaan, maar die zijn dan al veranderd in iets anders.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

Het ligt inderdaad aan het feit dat je een referentie naar het object meestuurd, en dus niet een kopie. Maar je hebt wel gelijk dat het werkt (en ook enkel in Mozilla voor zover ik hier kan testen):

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function doe(obj) {

  alert(obj.bliep);

}

var a = {
  bliep:'blaat'
}

setTimeout(doe, 1000, a);

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

jouw situatie komt meer overeen met dit scenario trouwens:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function doe(obj) {

  alert(obj.bliep);

}

function func() {

  var a = {
    bliep:'blaat'
  }

  setTimeout(doe, 1000, a);

  a.bliep = 'iets ander';

}

func();


;)

[ Voor 3% gewijzigd door crisp op 23-12-2003 17:37 ]

Intentionally left blank