[JS] Dynamische tabellen met onclick event

Pagina: 1
Acties:

  • muis
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
Ik ben hier al tijden bezig met een stuk code waar ik niet uit kom. Ik heb de code wat vereenvoudigd:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function populate_table() {
  oTable = document.getElementById('mytable');
  
  for(i=0;i<10;i++) {
    var oRow = oTable.insertRow(oTable.rows.length);
    var oCell = oRow.insertCell(oRow.cells.length);
    oCell.onclick= function(){ do_alert(i);};
    oCell.innerHTML = "NR "+i;
   }
}

function do_alert(num) {
  alert(num);
}

de functie populate_table() voegt 10 rows toe aan een tabel waarbij een onClick event worden meegegeven. Het probleem is dat wanneer ik later op de TD in de tabel klik en dus het onclick event wordt aangesproken ik altijd het cijfer 10 terug krijg. Blijkbaar wordt niet de huidige waarde van i bij het aanmaken van het onclick event meegegeven maar echt de variabele i. Weet iemand hoe ik mijn "oCell.onclick" zo kan veranderen dat de huidige waarde van "i" wordt meegegeven?

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:55

crisp

Devver

Pixelated

Door een extra scope te creeëren:
JavaScript:
1
2
3
4
5
6
7
8
oCell.onclick= createAlertFunction(i);

//...

function createAlertFunction(i)
{
    return function(){ do_alert(i);};
}

[/code]

Intentionally left blank


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
misschien zo: (weet niet zeker):

JavaScript:
1
eval('oCell.onclick= function(){ do_alert(' + i + ');};');

  • muis
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
Edwardvb schreef op vrijdag 16 maart 2007 @ 15:29:
misschien zo: (weet niet zeker):

JavaScript:
1
eval('oCell.onclick= function(){ do_alert(' + i + ');};');
Deze heb ik al eerder geprobeerd ook maar werkte helaas niet

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)


  • muis
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
crisp schreef op vrijdag 16 maart 2007 @ 15:29:
Door een extra scope te creeëren:
JavaScript:
1
2
3
4
5
6
7
8
oCell.onclick= createAlertFunction(i);

//...

function createAlertFunction(i)
{
    return function(){ do_alert(i);};
}

[/code]
Hee, dit is de oplossing ! _/-\o_

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)