Toon posts:

[js] 'a' element met 'onclick' attribuut clonen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi hoi,

Ik probeer voor een menu edior een 'a' element met 'onclick' attribuut clonen. De bedoeling is om de link een onclick mee te geven, waarna een functie wordt uitgevoerd.

De onclick code ziet er zo uit:
code:
1
2
3
4
5
6
7
var linkVerwijderen = document.createElement('a');
linkVerwijderen.href = '#';
linkVerwijderen.appendChild(document.createTextNode('Verwijderen'));
linkVerwijderen.onclick=function(event) {
     sharkvisMenuEdit(event);
}
linkVerwijderen.className='swe-menulink swe-verwijderen';


Vervolgens word dit element gecloned
code:
1
spanMetSubitemOptie.appendChild(linkVerwijderen.cloneNode(true));


Wanneer dat gebeurd is, gaat de onclick verloren lijkt het wel. Hoe kan ik dit oplossen? Is het uberhaupt mogelijk om de onclick te clonen?

I am so desperate :'(

[ Voor 16% gewijzigd door Verwijderd op 29-06-2005 14:05 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Als je het zo probeert dan, dus de functie apart definieren.
code:
1
2
3
4
5
6
linkVerwijderen.onclick = bla();

function bla(event) 
{
  sharkvisMenuEdit(event);
}

[ Voor 23% gewijzigd door André op 29-06-2005 14:49 ]


Verwijderd

Topicstarter
code:
1
linkVerwijderen.onclick = bla();


Als je het zo doet, wordt de functie al meteen uitgevoerd tijdens het parsen lijkt het.

code:
1
linkVerwijderen.onclick = bla;


werkt ook niet, maar de event moet ook meegegeven worden natuurlijk?

code:
1
linkVerwijderen.onclick = bla(event);


maarja, zelfde probleem als bij het eerste.. wordt al uitgevoerd in de code, en niet onclick.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:58

crisp

Devver

Pixelated

event wordt sowieso meegegeven in standard-compliant browsers; dit is dus gewoon voldoende:
JavaScript:
1
2
3
4
5
6
7
8
linkVerwijderen.onclick = sharkvisMenuEdit;

function sharkvisMenuEdit(e)
{
  if (!e) e = window.event; // IE is stom

  // code
}

[ Voor 3% gewijzigd door crisp op 29-06-2005 15:08 ]

Intentionally left blank


Verwijderd

Topicstarter
Bedankt crisp. Maar:

code:
1
spanMetSubitemOptie.appendChild(linkVerwijderen.cloneNode(true));

hierna "verdwijnt" de onclick. het lijkt wel of cloneNode de onlclick niet overneemt. m.a.w., hij doet het niet :P als ik cloneNode niet gebruik in een testje, werkt het wel.. maar ik moet het echt clonen, want er komen meerdere links in het document. help.

  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Kun je dan de onlclick misschien niet opnieuw setten:

code:
1
2
3
4
5
6
7
8
9
obj = spanMetSubitemOptie.appendChild(linkVerwijderen.cloneNode(true));
obj.onclick = sharkvisMenuEdit;

function sharkvisMenuEdit(e)
{
  if (!e) e = window.event; // IE is stom

  // code
}

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:58

crisp

Devver

Pixelated

Dit lijkt wel te werken in Mozilla (niet in IE though):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var a = document.createElement('a');
a.href = '#';
//a.onclick = myFunction;
a.setAttribute('onclick', 'return myFunction()');
a.appendChild(document.createTextNode('klik mij! '));

var i = 10;
while (i--)
{
    document.body.appendChild(a.cloneNode(true));
}

function myFunction()
{
    alert('hoi!');
    return false;
}

Intentionally left blank


Verwijderd

Topicstarter
Heb het even getest, in IE werkt het inderdaad niet.

Het is uiteindelijk gelukt met de code van Adre's laatste post, met wat aanpassingen omdat de onclicks in een object in dat object zaten. Het is wel wat omslachtig om steeds de onclicks nadat het element is aangemaakt nog toe te voegen, maar het zij zo.

Bedankt!

[ Voor 23% gewijzigd door Verwijderd op 29-06-2005 18:04 ]

Pagina: 1