Hallo allemaal,
In een website die ik moet onderhouden, kom ik volgende code tegen:
Daar gaat mijn haar van recht staan en zegt mijn intuïtie dat er een veel elegantere manier is om dit te doen.
Echter, wanneer ik onderstaande code probeer, krijgt elke alert de waarde van het laatste element..
Wat doe ik verkeerd? Dit moet toch te vereenvoudigen zijn?
De HTML met de id's waarnaar H1, H2 en zo verder, verwijzen, wordt clientside gegenereerd door JSON op te halen met een AJAX call. Aan die code kan ik weinig tot niks veranderen.
In een website die ik moet onderhouden, kom ik volgende code tegen:
JavaScript:
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
39
40
41
| element1 = document.getElementById("H1"); element1.onclick = function () { alert('H1: ' + element1.getAttribute('data-tlt')); }; element2 = document.getElementById("H2"); element2.onclick = function () { alert('H2: ' + element2.getAttribute('data-tlt')); }; element3 = document.getElementById("H3"); element3.onclick = function () { alert('H3: ' + element3.getAttribute('data-tlt')); }; element4 = document.getElementById("H4"); element4.onclick = function () { alert('H4: ' + element4.getAttribute('data-tlt')); }; element5 = document.getElementById("H5"); element5.onclick = function () { alert('H5: ' + element5.getAttribute('data-tlt')); }; element6 = document.getElementById("H6"); element6.onclick = function () { alert('H6: ' + element6.getAttribute('data-tlt')); }; element7 = document.getElementById("H7"); element7.onclick = function () { alert('H7: ' + element7.getAttribute('data-tlt')); }; element8 = document.getElementById("H8"); element8.onclick = function () { alert('H8: ' + element8.getAttribute('data-tlt')); }; element9 = document.getElementById("H9"); element9.onclick = function () { alert('H9: ' + element9.getAttribute('data-tlt')); }; ..... elementX = document.getElementById("HX"); elementX.onclick = function () { alert('HX: ' + elementX.getAttribute('data-tlt')); }; |
Daar gaat mijn haar van recht staan en zegt mijn intuïtie dat er een veel elegantere manier is om dit te doen.
Echter, wanneer ik onderstaande code probeer, krijgt elke alert de waarde van het laatste element..
JavaScript:
1
2
3
4
5
6
| for (var i = 1; i < 10; i++) { element = document.getElementById("H" + i); element.onclick = function () { alert('H' + i + ': ' + element.getAttribute('data-tlt')); }; } |
Wat doe ik verkeerd? Dit moet toch te vereenvoudigen zijn?
De HTML met de id's waarnaar H1, H2 en zo verder, verwijzen, wordt clientside gegenereerd door JSON op te halen met een AJAX call. Aan die code kan ik weinig tot niks veranderen.