Hey Tweakers,
De titel zal wat vaag zijn, maar ik weet niet precies hoe ik dit het beste kan omschrijven.
Ik heb de volgende functies:
Het probleem hier bij is dat als ik op een element klik altijd het ID van het laatste element ge-alert wordt, ipv het ID van het block waar ik op klik.
Ik ging er van uit dat elmId als een string gebruikt werd, op de zelfde manier als wanneer je dit inline doet. Maar het lijkt toch een referentie te zijn, of iets?
Dit dacht ik op te lossen door het zo te doen:
en dan de alert zo:
Maar dat werkt niet in Explorer.
Ooit had ik een zelfde probleem, maar dan met een onMouseOver, daar heb ik het toen opgelost door de volgende functie:
Maar dit schijnt weer niet te werken voor onClick events, want dan bestaat er geen e.toElement of e.relatedTarget. Ze alerten iig "null".
Kan iemand me uitleggen waar het mis gaat, en hoe ik dit op zou kunnen lossen? Of ben ik toch genoodzaakt d.m.v. een extra mouseover/mouseout event het huidige ID te bewaren in bijv. een hidden input?
De titel zal wat vaag zijn, maar ik weet niet precies hoe ik dit het beste kan omschrijven.
Ik heb de volgende functies:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
| function addBlockToggle(classname) { var blocks = getElementsByClassName(classname); for (var i=0; i<blocks.length; i++) { var elmId = blocks[i].id; // passing blocks[i].id direct results in: ERR blocks[i] has no properties addEventHandler(blocks[i], 'click', function(e){toggleBlock(elmId)}); } } function toggleBlock(id) { // testing... alert('toggle: '+id); } |
Het probleem hier bij is dat als ik op een element klik altijd het ID van het laatste element ge-alert wordt, ipv het ID van het block waar ik op klik.
Ik ging er van uit dat elmId als een string gebruikt werd, op de zelfde manier als wanneer je dit inline doet. Maar het lijkt toch een referentie te zijn, of iets?
Dit dacht ik op te lossen door het zo te doen:
JavaScript:
1
| addEventHandler(blocks[i], 'click', toggleBlock); |
en dan de alert zo:
JavaScript:
1
2
3
4
| function toggleBlock(id) { var id = this.id; alert('toggle: '+id); } |
Maar dat werkt niet in Explorer.
Ooit had ik een zelfde probleem, maar dan met een onMouseOver, daar heb ik het toen opgelost door de volgende functie:
JavaScript:
1
2
3
4
5
6
7
8
| function toggleBlock(e) { var id = this.id; if (!id) { elm = e.relatedTarget || e.toElement; id = elm.id; } alert('toggle: '+id); } |
Maar dit schijnt weer niet te werken voor onClick events, want dan bestaat er geen e.toElement of e.relatedTarget. Ze alerten iig "null".
Kan iemand me uitleggen waar het mis gaat, en hoe ik dit op zou kunnen lossen? Of ben ik toch genoodzaakt d.m.v. een extra mouseover/mouseout event het huidige ID te bewaren in bijv. een hidden input?
“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.