|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
[JS] Problema alertbox
Ciao a tutti, è da qualche giorno che ho inziato a studiacchaire un po di JS.
Oggi ho preso a lavorare con i form, per vedere se riuscivo a farli interagire come si deve; sto seguendo la guida ad esempi presente su html.it. Si chiede di fare una pagina in cui, inseriti età e email, lo script sia in grado di riconoscere se l'età è un valore valido ( quindi un numero ) e se il valore inserito per la mail è effettivamente un'indirizzo mail ( viene fatto un controllo sulla presenza, o meno, della chiocciola nel textbox ). Ho provato a scrivere lo script e la pagina tutta da me, tuttavia non funziona e non riesco a venirne a capo... Lo script mi sembra identico ( come funzionamento ) a quello proposto nella guida ( quello della guida l'ho testato e funziona ), però non va. Ecco cosa ho steso: Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Esempio</title>
<script type="application/javascript">
function controllo() {
eta = dati.eta.value;
email = dati.mail.value;
if ( isNaN(eta) )
{
alert('Errore età');
return false;
}
if ( email.indexOf("@")==-1 )
{
alert('Errore mail');
return false;
}
}
</script>
</head>
<body>
<p>Compila coi tuoi dati</p>
<form name="dati" action="http://www.google.it" onSubmit="return controllo();" >
Età: <input name="eta" type="text"><br />
Email: <input name="email" type="text" ><br />
<input type="submit" value="Invia" >
</form>
</body>
</html>
Lo script di html è questo: Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript">
function valida() {
//prendo i valori dei campi, abbreviandone i nomi
eta=dati.eta.value;
email=dati.email.value;
if (isNaN(eta)){
alert ("Inserisci un'età valida");
return false;
}
if (email.indexOf("@")==-1) {
alert ("Inserisci un'email valida");
return false;
}
}
</script>
</head>
<body>
<form name="dati" action="http://www.html.it" onSubmit="return valida();">
<!-notare il return anteposto alla chiamata della funzione-->
La tua età: <input type="text" name="eta"><br/>
La tua e-mail: <input type="text" name="email"><br/>
<input type="submit" value="invia">
</form>
</body>
</html>
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#2 |
|
Messaggi: n/a
|
Domanda che browser usi?
Perchè quello dovrebbe andare bene per Internet Explorer ma su Firefox ad esempio, se non ricordo male, non puoi accedere al DOM in quel modo: Codice:
form.input.value Codice:
var element = document.getElementById("id_elemento");
Codice:
element.value |
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Bene, ora sembra funzionare meglio, però non capisco perchè il codice di html va e il mio no...
Ad ogni modo, con le nuove modifiche apportare, il campo dell'età mi fa il giusto controllo, quello sulla mail no, penso di aver sbagliato qualcosa sull'indexOf che non so come aggiustare, ecco il codice: Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Esempio</title>
<script type="text/javascript">
function controllo() {
eta = document.getElementById('eta');
email = document.getElementById('dati');
if ( isNaN(eta.value) )
{
alert('Errore età');
return false;
}
if ( email.indexOf('@').value == -1 )
{
alert('Errore mail');
return false;
}
}
</script>
</head>
<body>
<p>Compila coi tuoi dati</p>
<form name="dati" action="http://www.google.it" onSubmit="return controllo();" >
Età: <input name="eta" type="text" id="eta"><br />
Email: <input name="email" type="text" id="email"><br />
<input type="submit" value="Invia" >
</form>
</body>
</html>
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Codice HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Esempio</title> <script type="text/javascript"> function controllo(form) { if ( isNaN(form.eta.value) ) { alert('Errore età'); return false; } if ( form.email.value.indexOf('@') == -1 ) { alert('Errore mail'); return false; } } </script> </head> <body> <p>Compila coi tuoi dati</p> <form action="http://www.google.it" onSubmit="return controllo(this);" > Età: <input name="eta" type="text"><br /> Email: <input name="email" type="text"><br /> <input type="submit" value="Invia" > </form> </body> </html> |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Firenze
Messaggi: 585
|
email = document.getElementById('dati');
va sostituito con email = document.getElementById('email');
__________________
http://www.gnu.org/philosophy/no-wor...hments.it.html http://gprime.net/flash/postingandyou.php [1510 kB] |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
So che definire quelle due variabili era ( ed è ) superfluo però per comodità, per abbreviazione e rapidità ho preferito far così... Quello che mi preme di capire è cosa c'è di errato nel mio codice che impedisce al motore di JS di eseguirlo... E certo non si tratta dell'utilizzo e del mancato riconoscimento di form.elemento.value, perchè se così fosse nemmeno il codice scritto d'esempio potrebbe funzionare. Non siete d'accordo? Quote:
EDIT: Ora con le dovute modifiche lo script va. Una perplessità che mi rimane ( e che non è stata spiegata ): A cosa serve il return false; dopo l'alert? E quello dentro il form? Codice:
<form action="http://www.google.it" onSubmit="return controllo();">
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
Ultima modifica di kwb : 27-02-2010 alle 16:49. |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Perchè la variabile "dati" non esiste e non è dichiarata da nessuna parte. Qualche browser (explorer sicuramente, forse anche firefox) se non trova una variabile con quel nome, cerca un elemento nel document che abbia quel valore come "id" o come "name". Ma non puoi affidarti a una funzionalità di questo tipo, può funzionare in un browser e non funzionare in altri (per esempio a te).
Il codice non è identico, perchè io ho scritto onSubmit="return controllo(this);" e "this" è un puntatore al form. Così funziona in qualsiasi browser. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Poi per sta storia dei puntatori devo ancora studiarmela bene perchè non l'ho troppo capita bene. Negli esempi si faceva vedere come con una funzione generica ( che salutava un determinato nome ) si potesse cambiarla in base a questi puntatori, ma non ho troppo assimilato la cosa. Questa storia dei puntatori mi sembra abbastanza di nicchia, fino ad ora nel c ( che è l'unico linguaggio di programmazione serio da me studiato ) non ho avuto ancora modo di usarla, e lo stesso html.it asserisce che probabilmente saranno rare le volte in cui si renderà necessario creare un puntatore. Quando sarà il caso ci tornerò sopra. Cmq sia, anche senza l'utilizzo di questo puntatore ora lo script funziona a dovere, infatti: Codice HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Esempio</title> <script type="text/javascript"> function controllo() { eta = document.getElementById('eta'); email = document.getElementById('email'); if ( isNaN(eta.value) ) { alert('Errore età'); return false; } if ( email.value.indexOf('@') == -1 ) { alert('Errore mail'); return false; } } </script> </head> <body> <p>Compila coi tuoi dati</p> <form name="dati" action="http://www.google.it" onSubmit="return controllo();" > Età: <input name="eta" type="text" id="eta"><br /> Email: <input name="email" type="text" id="email"><br /> <input type="submit" value="Invia" > </form> </body> </html>
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:14.




















