Toon posts:

[JS] Behaviour functie neemt de laatste waarde aan.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil zo veel mogelijk behaviour dynamisch koppelen aan elementen. Hiervoor heb ik een init() functie, welke nu aan <a>-elementen een onclick toevoegt om het daaropvolgende <ul>-element te tonen of verbergen (een uitklap menu dus).
JavaScript:
1
2
// submenu is het <ul>-element
toggle.onclick = function() {showHideElement(submenu.id);};

Omdat ik middels een loop dit toepas op meerdere <a>-elementen, bevat de variable submenu telkens opnieuw een <ul>-element. Maar wat schertst mijn verbazing: na afloop tonen en verbergen alle <a>-elementen hetzelfde <ul>-element, de laatste!

Mijn vermoeden is, dat dit te maken heeft met het meegeven van submenu.id. Ik wil daarvan de waarde meegeven aan showHideElement, en niet een referentie naar submenu, omdat die dus na afloop het laatste <ul>-element bevat. Is dat mogelijk? PHP kent &, VBScript kent ByRef/ByVal, C# heeft ref.

Ik kan natuurlijk ook de functie zo aanroepen: showHideMenu(this) waar this dan dus het <a>-element is, en dan daarbinnen het volgende <ul>-element zoeken en deze tonen of verbergen, maar dan heb ik een functie die alleen specifiek werkt voor dat menu (vanwege de structuur), en dat zou ik jammer vinden

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 07:23

crisp

Devver

Pixelated

ik sla vaak referenties (of id's - dat voorkomt iig memory-leaks in IE) op in de DOM-space van het object zelf; je kan dan zoiets doen:
JavaScript:
1
2
3
4
5
6
7
toggle.relatedID = submenu.id;
toggle.onclick = showHideRelatedElement;
...
function showHideRelatedElement()
{
  showHideElement(this.relatedID);
}

(voordeel hiervan is ook dat je geen anonymous functions hoeft te gebruiken en dus ook geheugen spaart).

Overigens kan het wel met een anonymous function, maar dan moet je zoiets doen:
JavaScript:
1
toggle.onclick = new Function('showHideElement(\''+submenu.id+'\');');

[ Voor 18% gewijzigd door crisp op 03-01-2006 14:11 ]

Intentionally left blank


Verwijderd

Topicstarter
Bedankt voor de uitleg!

Werkt als een zonnetje...