PDA

View Full Version : [javascript]- problemi nel creare select dinamiche


Re_Kotc
03-11-2008, 22:38
ciao a tutti, mi sono imbattuto in uno strano problema ultimamente..sto cercando di popolare le celle di una table dinamicamente con javascript, dopo aver creato una table di 24 righe ho pensato di popolare le celle prima con un campo di solo testo in questo modo :

for(g=0;g<24;g++){

document.getElementById(nome).rows[g].cells[2].innerHTML = "test";

}
e funziona perfettamente....
poi ho creato e popolato una select e ho provato ad inserirla su una singola riga per verificare che funzionasse e fortunatamente funzionava, a questo punto ho unito le due cose e ho provato a inserire la select ad ogni riga con questo codice :

for(g=0;g<24;g++){

document.getElementById(nome).rows[g].cells[2].appendChild(select);

}

e qui accade il fatto strano...ho inserito un alert di controllo subito dopo l'inserimento di ogni select, e pare che l'inserimento avvenga correttamente..solo che poi quando il select va inserito alla riga successiva..sparisce da quella precedente..!!!...cioè in pratica è come se si spostasse verso il basso...quindi alla fine dell'esecuzione dello script ho 24 righe vuote tranne l'ultima dove il select è "arrivato"...???

kk3z
04-11-2008, 13:26
Non puoi inserire lo stesso nodo più volte, appendChild non clona il nodo prima di inserirlo. Pensa un attimo: se funzionasse così, accedendo all'elemento select che hai appena creato, quale utilizzerebbe dei 24 che hai inserito?
var select = document.createElement("select");
for(g=0;g<24;g++){

document.getElementById(nome).rows[g].cells[2].appendChild(select);

}

//Ora, se funzionasse questo codice, se modifichi un attributo
//di select, a quale dei 24 select che hai inserito si riferirebbe?
select.name = "ciao";

Devi creare un select per ogni riga:
for(g=0;g<24;g++){
var select = document.createElement("select");
document.getElementById(nome).rows[g].cells[2].appendChild(select);

}

Oppure, clona il nodo:
var select = document.createElement("select");
for(g=0;g<24;g++){
var select_per_questa_riga = select.cloneNode(true);
document.getElementById(nome).rows[g].cells[2].appendChild(select_per_questa_riga);

}