Toon posts:

[JavaScript : IE5.5] event capturing

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleempje met het afvangen van events onder JavaScript. Het probleem is dat ik een event af wil vangen van het ene object met het andere object. Ik weet alleen niet hoe ik hem moet attachen zodat ook werkelijk het andere object aangesproken word. (het event moet dynamisch geattached worden)

Ik heb een voorbeeld stukje gemaakt zodat ik niet al die kilometers code hoef te posten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<script language="javascript">
 function cData(sTitle, sMSG){
   this.Title = sTitle;
   this.Message = sMSG;
 } 

 cData.prototype.addRow = function(oTable){
   var oRow, oCell;
   oRow = oTable.insertRow();
   oCell = oRow.insertCell();
   oCell.innerText = this.Title;
   oCell.onclick = this.showTitle; 
 }
 
 cData.prototype.showTitle = function(){
   alert(this.Message);
   alert("It won't work because where still in: " + this.tagName + "!!");
 }

</script>


<table id="tblData">
 <tr>
  <td>&nbsp</td><td>title</td>
 </tr>
</table>

<script language="javascript">
 oData1 = new cData("Klik hier!!", "U klikte");
 oData1.addRow(document.getElementById('tblData'));

 oData2 = new cData("Deze dan??", "Ook niet!!");
 oData2.addRow(document.getElementById('tblData'));

 oData2 = new cData("Hoe doe ik dit??", "Waarom niet??");
 oData2.addRow(document.getElementById('tblData'));
</script>


Heeft er iemand hier ene oplossing voor dit probleem??

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Javascript hoort in Webdesign & Graphics, zie ook: P&W FAQ - HTML / javascript /css, etc...
* gorgi_19 pakt een hockeystick en slaat het topic naar Webdesign & Graphics

\o/

[ Voor 18% gewijzigd door gorgi_19 op 06-07-2004 11:57 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Design??
Graphics??
Waar??
Ik zie alleen code :S

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Heb je al gezocht op attachEvent?

En werkt zoiets niet:
code:
1
oCell.onclick = function() { this.showTitle; }

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Je moet ff een cross-reference maken van het HTML-object dat je event afvangt naar het object dat je zelf gemaakt hebt:

code:
1
2
3
4
5
6
7
8
9
...
   oCell.onclick = this.showTitle;
   oCell.obj = this; 
 }
 
 cData.prototype.showTitle = function(){
   alert(this.obj.Message);
 }
...


dit is nodig omdat in de event handler "this" altijd slaat op het object dat het event afgevangen heeft.

[ Voor 16% gewijzigd door Genoil op 06-07-2004 12:13 ]


Verwijderd

Topicstarter
Bedankt Genoil, dat was de oplossing!! Het is wel niet helemaal schoon zoals ik het geleerd heb (onder C#), maar het zal onder JavaScript wel niet anders kunnen..

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

maar het zal onder JavaScript wel niet anders kunnen...
Jawel hoor :) Events zo attachen als directe onclicks en onmouse[blaat] is de DOM level 0 manier. De officiele manier gaat met node.addEventListener(), en daar zit een schitterend model omheen waar ontzettend veel op een schone manier mee kan. :P IE heeft helaas een eigen verzinsel waarmee je via node.attachEvent() iets dergelijks doet, iets minder mooi, maar ook nog aardig flexibel.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:46

crisp

Devver

Pixelated

attachEvent heeft als nadeel dat de uiteindelijke functie in de global scope word uitgevoerd en this dus naar je window verwijst...

Intentionally left blank


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

Yup. Dat kan je in een closure scopen:

code:
1
2
3
4
5
6
7
8
function Dinges() {
    
   // ...
   var self = this;
   ergensEenElement.attachEvent('onmousedown', function(event) {
      // self == this van hierboven ...
   })
}

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:46

crisp

Devver

Pixelated

Clay schreef op 06 juli 2004 @ 20:14:
Yup. Dat kan je in een closure scopen:

code:
1
2
3
4
5
6
7
8
function Dinges() {
    
   // ...
   var self = this;
   ergensEenElement.attachEvent('onmousedown', function(event) {
      // self == this van hierboven ...
   })
}
jep, leuke workaround, maar minder flexibel; de DOM level 0 manier heeft daarom toch mijn voorkeur als het om IE gaat ;)

Intentionally left blank

Pagina: 1