[Javascript] dynaimsch gegenereerde event handler params

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Beetje vage titel maar ik kon even niets beters verzinnen. Mijn probleem is alsvolgt:

Ik maak in code een menu aan. Ik heb hiervoor een class menu met hierin een array van menuItems en een functie draw. Die draw functie maakt een unsorted list aan dmv document.createElement() waarin elk menuItem een list item is. Nu is het de bedoeling dat als je met de muis over zo'n list element heengaat dat er een functie setActiveItem(id) wordt aangeroepen in deze menu classe waarbij id het id van het desbetreffende list element is.

In de loop die het menu aanmaakt is dit de code die het list element maakt
code:
1
2
3
var topMenuListItem = document.createElement('li');
topMenuListItem.setAttribute('id', currentItem.itemId);
topMenuListItem.onmouseover = function() { topNavMenu.SetActiveItem(topMenuListItem.id); };


Nu krijg ik bij ieder element waar ik overheen hover de id van het laatst getoonde list element. Hoe kan ik er voor zorgen dat ieder list item zijn eigen id meegeeft?

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Volgens mij ben je op zoek naar this.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Hmm, ik zie daar nergens een voorbeeld waar ze in die doSomething functie een parameter meegeven? Alleen bij het inline event registration voorbeeld.

Of begrijp ik iets niet goed?

Acties:
  • 0 Henk 'm!

Verwijderd

Een beetje verder in de tekst staat de oplossing...

Als je gewoon schrijft

code:
1
topMenuListItem.onmouseover = doSomething


dan kan je in de functie doSomething het keyword this gebruiken

je mag doSomething niet nogmaals verpakken in een functie

[ Voor 22% gewijzigd door Verwijderd op 20-11-2009 23:14 ]


Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Nee, want als ik er geen functie omheen wrap wordt die functie alleen 1x uitgevoerd zodra de pagina geladen wordt en daarna niet meer.

Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Opgelost met het Prototype javascript framework d.m.v. de bind functie:

code:
1
topMenuListItem.onmouseover = window.topNavMenu.SetActiveItem.bind(topMenuListItem);
Pagina: 1