Richiamare array in più campi

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
Dovrei fare in modo che ogni campo con il proprio richiamo-id, stampi l'alert...ho fatto dei tentativi ma :boxing:

PHP:
function caratteriNo() {
var fx = document.forms.mioform1;
var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];
for (j=0;j<nomeCampi.length;j++) { 
i=nomeCampi[j];
var error = false;
if (fx[i].value.indexOf("<")  != -1) {
error = true;
}
if (fx[i].value.indexOf(">")  != -1) {
error = true;
}
if (fx[i].value.indexOf("\\\\")  != -1) {
error = true;
}
if (error) {
fx[i].style.backgroundColor = 'red'
document.getElementById('caratterix').innerHTML = "I caratteri < > \\\\  non sono ammessi";
fx[i].focus();
return false;
} 
else {
document.getElementById('caratterix').innerHTML = "";
}
 }
return true;
}
 
Ciao,

visto che in altro post dichiari di aver risolto con alert("messaggio")

sai come scorrere gli indici dell'array e in quale variabile gli hai inseriti.

Per logica devi mettere la variabile che controlla in quale campo si verifica l'evento del tuo ciclo for che scorre gli indici dell'array.

qui, document.getElementById(QUI).innerHTML = "I caratteri < > \\\\ non sono ammessi";

e

qui, document.getElementById(QUI).innerHTML = "";

non puoi referenziare un id con un nome univoco per id diversi, ma referenziarli in base al name dei campi del form che sono qui:

Codice:
var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];

Valeria.
 
Ciao,

visto che in altro post dichiari di aver risolto con alert("messaggio")

sai come scorrere gli indici dell'array e in quale variabile gli hai inseriti.

Per logica devi mettere la variabile che controlla in quale campo si verifica l'evento del tuo ciclo for che scorre gli indici dell'array.

qui, document.getElementById(QUI).innerHTML = "I caratteri < > \\\\ non sono ammessi";

e

qui, document.getElementById(QUI).innerHTML = "";

non puoi referenziare un id con un nome univoco per id diversi, ma referenziarli in base al name dei campi del form che sono qui:

Codice:
var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];

Valeria.

Si, cosi funziona e lo sapevo, ma il punto è che escono sempre 2 alert invece di quello interessato

PHP:
...
document.getElementById('caratterix').innerHTML = "I caratteri < > \\\\  non sono ammessi";
document.getElementById('caratterix1').innerHTML = "I caratteri < > \\\\  non sono ammessi";
fx[i].focus();
return false;
} 
else {
document.getElementById('caratterix').innerHTML = "";
document.getElementById('caratterix1').innerHTML = "";
}
 }
 return true;
}


Campo1: <span id="caratterix"></span>

Campo2: <span id="caratterix1"></span>
 
Non mi sembra di aver detto questo,

basta un solo document.getElementById()

ma deve essere referenziato in base alla variabile associata agli indici degli Array,

lo hai fatto te il ciclo per scorrere gli indici degli array, metti la variabile che scorre quel ciclo.

Ti metto in'aggiunta i tag <span> devono avere come id il name del form.

Valeria.
 
Non mi sembra di aver detto questo,

basta un solo document.getElementById()

ma deve essere referenziato in base alla variabile associata agli indici degli Array,

lo hai fatto te il ciclo per scorrere gli indici degli array, metti la variabile che scorre quel ciclo.

Ti metto in'aggiunta i tag <span> devono avere come id il name del form.

Valeria.
Scusa non riesco a capire questo punto

basta un solo document.getElementById()

mi dici di metterne uno, e gli altri campi?
 
Scusa non riesco a capire questo punto

basta un solo document.getElementById()

mi dici di metterne uno, e gli altri campi?


Gli altri campi gli scorri con la variabile degli indici degli array

questo lo hai fatto te

var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];
for (j=0;j<nomeCampi.length;j++) {
i=nomeCampi[j];

quel'è la variabile che controlla gli indici degli array (che sono i name dei campi del form)?

Visto che scorri tutti i name del form basta un solo document.getElementById() dove tra le parentesi metti la variabile associata a nomeCampi

Ricorda di dare ad ogni tag <span> che ti serve per visualizzare il messaggio come id il nome del campo stesso.

Valeria.
 
Gli altri campi gli scorri con la variabile degli indici degli array

questo lo hai fatto te

var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];
for (j=0;j<nomeCampi.length;j++) {
i=nomeCampi[j];

quel'è la variabile che controlla gli indici degli array (che sono i name dei campi del form)?

Visto che scorri tutti i name del form basta un solo document.getElementById() dove tra le parentesi metti la variabile associata a nomeCampi

Ricorda di dare ad ogni tag <span> che ti serve per visualizzare il messaggio come id il nome del campo stesso.

Valeria.

MMM..nel mio caso gli <input type="text" name="nome"...> ecc non c'entrano, io il richiamo <span id="caratterix"></span> intendo metterlo in punti diversi
 
Si,

ho capito

Codice:
<script type="text/javascript">
function caratteriNo() {
var fx = document.forms.mioform1;
var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];
for (j=0;j<nomeCampi.length;j++) { 
i=nomeCampi[j];
var error = false;
if (fx[i].value.indexOf("<")  != -1) {
error = true;
}
if (fx[i].value.indexOf(">")  != -1) {
error = true;
}
if (fx[i].value.indexOf("\\\\")  != -1) {
error = true;
}
if (error) {
fx[i].style.backgroundColor = 'red'
document.getElementById(''+[i]).innerHTML = "I caratteri < > \\\\  non sono ammessi";
fx[i].focus();
return false;
} 
else {
document.getElementById(''+[i]).innerHTML = "";
}
}
return true;
}
</script>
</head>

<body> 
        
<form method="post" name="mioform1" action="ins.php" onsubmit="return(caratteriNo())">
NOME * <input  type="text" name="nome" onkeyup="caratteriNo()" /><span id="nome"></span>
<br />
CITTA *<input type="text" name="citta" onkeyup="caratteriNo()" /><span id="citta"></span>
<br />
SUOEMAIL *<input type="text" name="suoemail" onkeyup="caratteriNo()" /><span id="suoemail"></span>
<br />
MESSAGGIO *<input type="text" name="messaggio" onkeyup="caratteriNo()" /><span id="messaggio"></span>
<br />
VALIDATOR *<input type="text" name="validator" onkeyup="caratteriNo()" /><span id="validator"></span>
<br />
<button type="submit" name="send" id="submit">Invia</button>   
</form>

Provalo in una pagina che contiene solo questo esempio, no nell'insieme di funzioni dello script che usi.

Valeria.
 
Ok, lui funziona però ho 2 codici simili che entrano in conflitto, ti spiego: se lascio solo il tuo funziona, se in questo codice sotto applico lo stesso metodo di richiamo, questo non va

PHP:
function parolaNo(){ 
var modulo = document.forms.mioform1;
var parole = /\b(<?php echo $paroleProibite; ?>)\b/i; 
var nomiCampi = ["nome","citta","messaggio"];
for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
var campo = modulo.elements[nomiCampi[idCampo]];
if (parole.test(campo.value)) {
campo.style.backgroundColor = "red"
document.getElementById('nomiCampi').innerHTML = "La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa";
campo.focus();
return false;
}
else {
document.getElementById('nomiCampi').innerHTML = "";
} 
 }
return true; 
}

richiamo; <span id="nome"></span>
 
Ok, lui funziona però ho 2 codici simili che entrano in conflitto, ti spiego: se lascio solo il tuo funziona, se in questo codice sotto applico lo stesso metodo di richiamo, questo non va

PHP:
function parolaNo(){ 
var modulo = document.forms.mioform1;
var parole = /\b(<?php echo $paroleProibite; ?>)\b/i; 
var nomiCampi = ["nome","citta","messaggio"];
for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
var campo = modulo.elements[nomiCampi[idCampo]];
if (parole.test(campo.value)) {
campo.style.backgroundColor = "red"
document.getElementById('nomiCampi').innerHTML = "La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa";
campo.focus();
return false;
}
else {
document.getElementById('nomiCampi').innerHTML = "";
} 
 }
return true; 
}

richiamo; <span id="nome"></span>

Ciao,

io non so che dire, dovresti rivedere quello che hai scritto, hai dato un nome a un campo di un id nomiCampi e pretendi di visualizzare il messaggio in un id chiamato nome?.

Anche qui hai la stessa situazione usa un solo nome per un id, hai un'array con gli indici dei name dei campi del form usalo, mi spiace ma stai scrivendo a caso, e questo non ti aiuta a imparare e/o a capire dove sbagli.

Nell'esempio che hai postato per scorrere gli indici degli array nel document.getElementById() devi mettere la variabile del ciclo for per i name dei campi del form.

Codice:
document.getElementById(''+nomiCampi[idCampo]).innerHTML ="";

Dato che ogni funzione viene richiamata quando si verifica una determinata condizione if(condizione è vera) esegue la if , se è falsa viene ignorata e si passa al controllo successivo.

Questo è un'esempio con le due funzioni: caratteriNo() e function parolaNo() inserite in un solo script con gli sessi campi e id:

Codice:
<script type="text/javascript">
function caratteriNo() {
var fx = document.forms.mioform1;
var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];
for (j=0;j<nomeCampi.length;j++) { 
i=nomeCampi[j];
var error = false;
if (fx[i].value.indexOf("<")  != -1) {
error = true;
}
if (fx[i].value.indexOf(">")  != -1) {
error = true;
}
if (fx[i].value.indexOf("\\\\")  != -1) {
error = true;
}
if (error) {
fx[i].style.backgroundColor = 'red'
document.getElementById(''+[i]).innerHTML = "I caratteri < > \\\\  non sono ammessi";
fx[i].focus();
return false;
} 
else {
document.getElementById(''+[i]).innerHTML = "";
}
}
return true;
}

function parolaNo(){ 
var modulo = document.forms.mioform1;
var parole = /\b(casa|cane|gatto|topo)\b/i;
var nomiCampi = ["nome","citta","suoemail","messaggio","validator"];
for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
var campo = modulo.elements[nomiCampi[idCampo]];
if (parole.test(campo.value)) {
campo.style.backgroundColor = "red"
document.getElementById(''+nomiCampi[idCampo]).innerHTML = "La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa";
campo.focus();
return false;
}
else {
document.getElementById(''+nomiCampi[idCampo]).innerHTML = "";
} 
}
return true; 
}
</script>
</head>

<body> 
        
<form method="post" name="mioform1" action="ins.php" onsubmit="return(caratteriNo() && parolaNo())">
NOME * <input  type="text" name="nome" onkeyup="caratteriNo()" /><span id="nome"></span>
<br />
CITTA *<input type="text" name="citta" onkeyup="caratteriNo()" /><span id="citta"></span>
<br />
SUOEMAIL *<input type="text" name="suoemail" onkeyup="caratteriNo()" /><span id="suoemail"></span>
<br />
MESSAGGIO *<input type="text" name="messaggio" onkeyup="caratteriNo()" /><span id="messaggio"></span>
<br />
VALIDATOR *<input type="text" name="validator" onkeyup="caratteriNo()" /><span id="validator"></span>
<br />
<button type="submit" name="send" id="submit">Invia</button>   
</form>

E' buona regola scrivere codice pulito e funzionale.

Valeria.
 
Ciao,

io non so che dire, dovresti rivedere quello che hai scritto, hai dato un nome a un campo di un id nomiCampi e pretendi di visualizzare il messaggio in un id chiamato nome?.

Anche qui hai la stessa situazione usa un solo nome per un id, hai un'array con gli indici dei name dei campi del form usalo, mi spiace ma stai scrivendo a caso, e questo non ti aiuta a imparare e/o a capire dove sbagli.

Nell'esempio che hai postato per scorrere gli indici degli array nel document.getElementById() devi mettere la variabile del ciclo for per i name dei campi del form.

Codice:
document.getElementById(''+nomiCampi[idCampo]).innerHTML ="";

Dato che ogni funzione viene richiamata quando si verifica una determinata condizione if(condizione è vera) esegue la if , se è falsa viene ignorata e si passa al controllo successivo.

Questo è un'esempio con le due funzioni: caratteriNo() e function parolaNo() inserite in un solo script con gli sessi campi e id:

Codice:
<script type="text/javascript">
function caratteriNo() {
var fx = document.forms.mioform1;
var nomeCampi = ["nome","citta","suoemail","messaggio","validator"];
for (j=0;j<nomeCampi.length;j++) { 
i=nomeCampi[j];
var error = false;
if (fx[i].value.indexOf("<")  != -1) {
error = true;
}
if (fx[i].value.indexOf(">")  != -1) {
error = true;
}
if (fx[i].value.indexOf("\\\\")  != -1) {
error = true;
}
if (error) {
fx[i].style.backgroundColor = 'red'
document.getElementById(''+[i]).innerHTML = "I caratteri < > \\\\  non sono ammessi";
fx[i].focus();
return false;
} 
else {
document.getElementById(''+[i]).innerHTML = "";
}
}
return true;
}

function parolaNo(){ 
var modulo = document.forms.mioform1;
var parole = /\b(casa|cane|gatto|topo)\b/i;
var nomiCampi = ["nome","citta","suoemail","messaggio","validator"];
for (idCampo = 0; idCampo < nomiCampi.length; idCampo++) {
var campo = modulo.elements[nomiCampi[idCampo]];
if (parole.test(campo.value)) {
campo.style.backgroundColor = "red"
document.getElementById(''+nomiCampi[idCampo]).innerHTML = "La parola \"" + campo.value.match(parole)[0] + "\" non è ammessa";
campo.focus();
return false;
}
else {
document.getElementById(''+nomiCampi[idCampo]).innerHTML = "";
} 
}
return true; 
}
</script>
</head>

<body> 
        
<form method="post" name="mioform1" action="ins.php" onsubmit="return(caratteriNo() && parolaNo())">
NOME * <input  type="text" name="nome" onkeyup="caratteriNo()" /><span id="nome"></span>
<br />
CITTA *<input type="text" name="citta" onkeyup="caratteriNo()" /><span id="citta"></span>
<br />
SUOEMAIL *<input type="text" name="suoemail" onkeyup="caratteriNo()" /><span id="suoemail"></span>
<br />
MESSAGGIO *<input type="text" name="messaggio" onkeyup="caratteriNo()" /><span id="messaggio"></span>
<br />
VALIDATOR *<input type="text" name="validator" onkeyup="caratteriNo()" /><span id="validator"></span>
<br />
<button type="submit" name="send" id="submit">Invia</button>   
</form>

E' buona regola scrivere codice pulito e funzionale.

Valeria.

Per te è semplice, ma io...tutte queste regole.

ho notato che nell onkeyup non hai messo questo, è così o l'hai dimenticato?

parolaNo()
 
Ciao,

non credevo volessi controllarlo anche con keyup

se vuoi usarlo anche con keyup, aggiungilo al gestore di eventi onkeyup

onkeyup="caratteriNo();parolaNo()"

in tutti i campi.

Valeria
 
Ciao,

non credevo volessi controllarlo anche con keyup

se vuoi usarlo anche con keyup, aggiungilo al gestore di eventi onkeyup

onkeyup="caratteriNo();parolaNo()"

in tutti i campi.

Valeria

Si l'ho messo, ho notato una cosa: che se digito il carattere proibito esce subito a video l'alert, e così va bene; mentre con la parola proibita l'alert esce quando clicco su Invia
 
Deve uscire subito

Codice:
<form method="post" name="mioform1" action="ins.php" onsubmit="return(caratteriNo() && parolaNo())">
NOME * <input  type="text" name="nome" onkeyup="caratteriNo();parolaNo()" /><span id="nome"></span>
<br />
CITTA *<input type="text" name="citta" onkeyup="caratteriNo();parolaNo()" /><span id="citta"></span>
<br />
SUOEMAIL *<input type="text" name="suoemail" onkeyup="caratteriNo();parolaNo()" /><span id="suoemail"></span>
<br />
MESSAGGIO *<input type="text" name="messaggio" onkeyup="caratteriNo();parolaNo()" /><span id="messaggio"></span>
<br />
VALIDATOR *<input type="text" name="validator" onkeyup="caratteriNo();parolaNo()" /><span id="validator"></span>
<br />
<button type="submit" name="send" id="submit">Invia</button>   
</form>

il ; è il separatore per richiamare più funzioni con un solo gestore di eventi, puoi separarli con la , o con l'operatore di confronto && && è un AND controlla che tutte e due le richieste siano valide || OR una delle due deve essere valida.

Valeria.
 
Deve uscire subito

Codice:
<form method="post" name="mioform1" action="ins.php" onsubmit="return(caratteriNo() && parolaNo())">
NOME * <input  type="text" name="nome" onkeyup="caratteriNo();parolaNo()" /><span id="nome"></span>
<br />
CITTA *<input type="text" name="citta" onkeyup="caratteriNo();parolaNo()" /><span id="citta"></span>
<br />
SUOEMAIL *<input type="text" name="suoemail" onkeyup="caratteriNo();parolaNo()" /><span id="suoemail"></span>
<br />
MESSAGGIO *<input type="text" name="messaggio" onkeyup="caratteriNo();parolaNo()" /><span id="messaggio"></span>
<br />
VALIDATOR *<input type="text" name="validator" onkeyup="caratteriNo();parolaNo()" /><span id="validator"></span>
<br />
<button type="submit" name="send" id="submit">Invia</button>   
</form>

il ; è il separatore per richiamare più funzioni con un solo gestore di eventi, puoi separarli con la , o con l'operatore di confronto && && è un AND controlla che tutte e due le richieste siano valide || OR una delle due deve essere valida.

Valeria.
Si avevo già messo il punto e virgola, anche il tuo codice fa quel difetto con in caratteri proibiti (esce l'alert quando si clicca Invia)
 
A me esce subito il messaggio di avviso,

prova a sostituire ; con &&


Valeria.

Per farlo funzionare ho dovuto mettere && solo fra questi 2 parolaNo() && caratteriNo(), agli altri nell'onkeyup ho dovuto lasciare il punto e virgola altrimenti non funzionavano.

Sono cose strane...per un niente non ti funziona
 
Ciao,

puoi spiegarti meglio, dove hai messo && tra parolaNo() && caratteriNo()

e dove hai lasciato come separatore i ;

Valeria.
 

Discussioni simili