È un “problema” classico di javascript. Succede perché assegnare n volte una funzione a qualcosa non significa creare n funzioni diverse. Tu stai assegnando a tutti i tuoi elementi la stessa funzione, che attingerà alle variabili che si trova intorno per come sono al momento in cui viene eseguita. L'unico modo per creare con un ciclo n funzioni realmente diverse è col costruttore di funzioni new Function("[CORPO DELLA FUNZIONE"]), ma è un metodo dispendioso e inutile per casi come il tuo, per i quali esistono soluzioni molto più semplici. La più sicura è l'assegnazione di un id ai tuoi elementi. Si tratta della soluzione più supportata (funzionerà con TUTTI i browsers):
codice:
function tuaFunzione() { InsertDelUser.inserimentoUtenti(this.id) }
var linkForLi = document.createElement('a');
linkForLi.appendChild(document.createTextNode(usernameArray[i]));
linkForLi.href = '#no-up';
linkForLi.id = idArray[i];
linkForLi.onclick = tuaFunzione;
Un'altra possibilità è quella di adoperare i metodi getUserData e setUserData, che hanno il vantaggio di poter contenere anche numeri, booleani, etc., a differenza degli id che possono contenere solo stringhe. Il problema però è che non sono supportati dai browsers più vecchi
Di fatto si tratta del metodo "ufficiale" per risolvere questo tipo di problemi:
codice:
function tuaFunzione() { InsertDelUser.inserimentoUtenti(this.getUserData("idToSend")) }
var linkForLi = document.createElement('a');
linkForLi.appendChild(document.createTextNode(usernameArray[i]));
linkForLi.href = '#no-up';
linkForLi.setUserData("idToSend", idArray[i], null);
linkForLi.onclick = tuaFunzione;
Un'ultima possibilità è quella di usare l'operatore let, che è in grado di dichiarare delle variabili in un nuovo scope. Come ti accorgerai dalla colorazione in rosso, si tratta di uno standard relativamente recente, dovrai quindi specificare la versione di javascript all'interno del tag <script> (<script type="text/javascript;version=1.7">):
codice:
<script type="text/javascript;version=1.7">
var linkForLi = document.createElement('a');
linkForLi.appendChild(document.createTextNode(usernameArray[i]));
linkForLi.href = '#no-up';
let idToSend = idArray[i];
linkForLi.onclick = function () { InsertDelUser.inserimentoUtenti(idToSend) };
</script>