Toon posts:

[JS] appendChild in IE alleen op hardcoded elementen

Pagina: 1
Acties:

Verwijderd

Topicstarter
hey!

ik ben bezig met een vragenlijst te maken waarbij nieuwe vragen en subvragen gemakkelijk met behulp van javascript aan de dom toegevoegd kunnen worden.

http://members.home.nl/lsvenom/test.html

In Firefox werkt het geheel ( op de nummering na ).
In IE kan ik echter alleen acties op de elementen uitvoeren die hard in de code staan ( de twee vragen die er direct staan ).

Ik heb al gegoogled en wat rondgevraagd, maar nog geen oplossing...

Verwijderd

Je moet niet teveel met de setAttribute werken.
De setAttribute('onclick') werkt niet in IE. Je moet hiervoor:

$var.onclick = hierjefunctie gebruiken. Let wel op dat je dan geen parameters kan meegeven.
je moet dit dmv de event doen. Dmv het event vraag je het juist object op en aan de hand daarvan kan je gaan doen wat je zelf wilt.

edit:
Hier een link voor die events
http://www.quirksmode.org/js/introevents.html

[ Voor 14% gewijzigd door Verwijderd op 20-05-2006 12:30 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:18

crisp

Devver

Pixelated

attributen die eigenlijk bindings zijn naar interfaces (zoals in dit geval naar scriptevents) zijn eigenlijk geen echte attributen maar meer properties op DOM-level; setAttribute() hiervoor gebruiken is dus feitelijk incorrect (dat geldt ook bijvoorbeeld voor het style-'attribuut')
Overigens als je via de interface methods (DOM level 0 dmv onclick=handler of DOM level 2 via addEventListener*) methods toekent dan heb je in de handler een referentie naar het element middels het 'this' keyword - slim gebruik hiervan zorgt dat je doorgaans geen parameters nodig hebt ;)

* IE kent niet de DOM level 2 event methods maar heeft z'n eigen propriety eventmodel waar je middels attachEvent events kan toekennen; grootste manko van dit model is het feit dat 'this' binnen de handler niet naar het element verwijst maar naar je window object. Er zijn libraries waarin dit probleem omzeilt wordt en je toch meerdere handlers aan hetzelfde event kan hangen, als je echter geen meerdere handlers gebruikt of nodig hebt kan je beter de DOM level 0 methode gebruiken :)

Voor het probleem van TS: je zou ook een mix kunnen gebruiken van DOM methods en een stukje innerHTML, hoewel innerHTML niet gestandaardiseerd is is het wel beschikbaar in alle moderne browsers en geeft vaak een betere performance dan het aanmaken van complete HTML fragments via DOM methods.

[ Voor 53% gewijzigd door crisp op 20-05-2006 13:02 ]

Intentionally left blank