[JS] event handlers op elementen via DOM

Pagina: 1
Acties:

  • Johnny
  • Registratie: December 2001
  • Laatst online: 22-05 10:01

Johnny

ondergewaardeerde internetguru

Topicstarter
Als ik via de DOM manier in JavaScript een element maak dan werken event handlers daarop niet in Mozilla en MSIE. Opera doet het wel.

Ik heb zoiets al eens eerder gehad, maar toen werkte het alleen niet in MSIE en kon ik het oplossen met innerHTML.

Nu wil ik echter voor iedere tag een andere plaatsen. In dit voorbeeld een afbeelding voor een titel waarbij het plaatje aanklikbaar zou moeten zijn met het onclick attribuut. Het plaatje wordt wel geplaatst, maar in Mozilla en MSIE gebeurt er niets als je er op klikt, Opera laat wel gewoon de alert zien.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function test() {

    titles = document.getElementsByTagName('h1');

    for(var i=0; i < titles.length; i++) {

        var img = document.createElement('img');

        img.src = 'scroll.png';

        img.onclick = "alert('test')";

        titles[i].parentNode.insertBefore(img, titles[i]);
    }
}

window.onload = test;


Voorbeeld van de HTML pagina

Hoe los ik dat op?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
img.onclick = "alert('test')";

veranderen in:

img.onclick = function() { alert('test'); };

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
Zo zou ie het moeten doen :)
JavaScript:
1
2
3
img.onclick = function() {
    alert("test");
}
edit:
Grrr... KillR-B :( :9

[ Voor 21% gewijzigd door Amras op 28-08-2004 13:39 ]


  • Johnny
  • Registratie: December 2001
  • Laatst online: 22-05 10:01

Johnny

ondergewaardeerde internetguru

Topicstarter
Een simpele alert met een vaste string werkt nu.

Maar als ik in die alert bijvoorbeeld de ID van de titel wil laten zien dan gaat het niet

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function test() {

    titles = document.getElementsByTagName('h1');

    for(var i=0; i < titles.length; i++) {
        //werkt wel
        alert(titles[i].id);

        var img = document.createElement('img');

        img.src = 'scroll.png';
        //werkt niet
        img.onclick = function() { alert(titles[i].id); };

        titles[i].parentNode.insertBefore(img, titles[i]);
    }
}



Voorbeeld van de HTML pagina

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

moet met

code:
1
alert(this.id);


in de onclick wel werken. This verwijst dan daar naar de image, omdat je het met die onclick ref direct aan het image object hangt.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


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

crisp

Devver

Pixelated

of
JavaScript:
1
img.onclick = new Function('alert(\''+titles[i].id+'\')');

of
JavaScript:
1
img.onclick = function() { alert(this.nextSibling.id); }


;)

Intentionally left blank

Pagina: 1