
Originariamente inviata da
KillerWorm
Ciao, il problema sta nel fatto che stai usando
stringa_valoredacambiare per eseguire il
replace e quindi aggiornare il valore corrente di
stringa_valoredacambiare2, non tenendo conto però che il
replace non modifica il valore originale della variabile a cui è applicato (cioè
stringa_valoredacambiare resta sempre invariata), per questo ogni volta che esegui quell'azione non stai tenendo conto delle precedenti modifiche eseguite nel ciclo.
Dovresti utilizzare sempre il valore corrente di quell'elemento (
stringa_valoredacambiare2) in modo da tenere conto di tutte le modifiche effettuate nel ciclo.
Inoltre c'è qualcosa qui che mi suona strano o quantomeno inutile:
codice:
replace(mioarray[i], mioarray[i])
Non ha senso rimpiazzare un valore con lo stesso identico valore; ma posso pensare che tu abbia tralasciato qualcosa nell'esempio postato qui, come hai premesso.
Personalmente rivedrei la funzione in questo modo:
Crea i due array per i valori dei due campi, quindi eseguo il ciclo sui valori inseriti e modifico l'array dei valori modificati secondo le operazioni che avvengono nel ciclo. Alla fine del ciclo riassemblo i valori dell'array modificato per aggiornare il valore del relativo campo.
Qui lo script rielaborato e commentato (ho aggiunto anche qualche altra cosa per renderlo più robusto):
codice:
function prova() {
var fldValoriInseriti = document.getElementById('valoredainserire'); // Campo valori inseriti
var fldValoriEsistenti = document.getElementById('valoredacambiare'); // Campo valori esistenti
var arrValoriInseriti = fldValoriInseriti.value.split(/ *; */).filter(Boolean); // Array valori inseriti (ripulito da spazi superflui e valori vuoti)
var arrValoriEsistenti = fldValoriEsistenti.value.split(/ *; */).filter(Boolean); // Array valori esistenti (ripulito da spazi superflui e valori vuoti)
arrValoriInseriti.forEach((val)=>{ // Ciclo i valori inseriti
var idValoreEsistente = arrValoriEsistenti.indexOf(val);
if (idValoreEsistente !== -1) { // Se questo valore è presente tra quelli esistenti
// Chiedo se mantenerlo o rimuoverlo
if (!confirm('Il valore "' + val + '" è già presente. Cosa si desidera fare?\n\n - [OK] mantieni\n - [Annulla] rimuovi')){
arrValoriEsistenti.splice(idValoreEsistente, 1);
}
} else { // Se questo valore non è presente tra quelli esistenti
arrValoriEsistenti.push(val); // Lo aggiungo
}
});
fldValoriEsistenti.value = arrValoriEsistenti.join('; '); // Aggiorno il campo fldValoriEsistenti
}