PDA

View Full Version : [JAVASCRIPT] non riesco a far funzionare questo script


Tzor
29-03-2009, 13:48
Ho iniziato a studiare Javascript da 5/6 giorni e sto facendo un esercizio.

In pratica dovrei creare degli oggetti che si occupano di controllare i campi di una semplice form.

* L'oggetto TextField si occupa di controllare se la dimensione del nome inserito in una label è corretta
* L'oggetto NumericField si occupa di controllare se le 2 età da inserire nella form sono entro un certo range
* L'oggetto LessThan si occupa di controllare che l'età attuale sia minore dell'età al momento del conseguimento della patente di guida

Ciascuno di questi oggetti ha un metodo isValid e un metodo explain che si occupano, rispettivamente, di effettuare il controllo vero e proprio e di generare un messaggio da inserire poi in un alert.


Questi oggetti vengono crati all'interno della funzione controlla che ho definito nella <head> del file .html (gli oggetti invece sono in un file .js)



Ecco il codice del file html:

<html>

<head>
<title>Esercizio j03</title>
<script type="text/JavaScript" src="esj03.js"></script>
<script type="text/JavaScript">
function controlla() {
var n = document.forms[0].elements[0].value;
var e =document.forms[0].elements[1].value;
var p = document.forms[0].elements[2].value;
var msg = "";

var control_n = new TextField(n, 1, 25);
var control_e = new NumericField(e, p, 1, 99);
var control_rel = new LessThan(e, p);

if (!control_n.flag_n()) {
msg += control_n.msg_n();
document.forms[0].elements[0].reset();
}

if (!control_e.flag_e()) {
msg += control_e.msg_e();
document.forms[0].elements[1].reset();
document.forms[0].elements[2].reset();
}

if (!control_rel.flag_rel()) {
msg += control_rel.msg_rel();
document.forms[0].elements[1].reset();
document.forms[0].elements[2].reset();
}

if (msg != "") {
alert(msg);
}
}
</script>
</head>

<body>
<form method="post" action="#">
<p>Nome:</p><input type="text" name="nome" size="30" /><br />
<p>Et&agrave:</p><input type="text" name="eta" size="3" /><br />
<p>Et&agrave al conseguimento della patente di guida:</p><input type="text" name="patente" size="3" /><br /><br />
<input type="button" value="Invia" onclick="controlla();" />
<input type="reset" value ="Reset" />
</form>
</body>

</html>
E quello del file js:

//classe TextField
function TextField(nome, minString, maxString) {
this.nome = nome;
this.minString = minString;
this.maxString = maxString;
this.flag_n = isValid_n;
this.msg_n = explain_n;
}

function isValid_n() {
if ((this.nome.length < this.minString) || (this.nome.length > this.maxString)) {
return false;
} else {
return true;
}
}

function explain_n() {
if ((this.nome.length < this.minString) || (this.nome.length > this.maxString)) {
return "\nAttenzione! Errore nel campo 'nome'";
} else {
return "";
}
}




//classe NumericField
function NumericField(eta, patente, min_num, max_num) {
this.eta = eta;
this.patente = patente;
this.min_num = min_num;
this.max_num = max_num;
this.flag_e = isValid_e;
this.msg_e = explain_e;
}

function isValid_e() {
if ((Object.isUndefined(this.eta) || Object.isUndefined(this.patente)) {
return false;
} else {
if ((this.eta < this.min_num) || (this.eta > this.max_num)) || ((this.patente < this.patente) || (this.patente > this.patente))) {
return false;
} else {
if (this.patente < 16) {
return false;
} else {
return true;
}
}
}
}

function explain_e() {
if ((Object.isUndefined(this.eta) || Object.isUndefined(this.patente)) {
return "\nAttenzione! Errore nei campi 'eta'";
} else {
if ((this.eta < this.min_num) || (this.eta > this.max_num)) || ((this.patente < this.patente) || (this.patente > this.patente))) {
return "\nAttenzione! Errore nei campi 'eta'";
} else {
if (this.patente < 16) {
return "\nAttenzione! Errore nei campi 'eta'";
} else {
return "";
}
}
}
}




//classe LessThan
function LessThan(eta, patente) {
this.eta = eta;
this.patente = patente;
this.flag_rel = isValid_rel;
this.msg_rel = explain_rel;
}

function isValid_rel() {
if ((Object.isUndefined(this.eta) || Object.isUndefined(this.patente)) {
return false;
} else {
if (this.eta < this.patente) {
return false;
} else {
return true;
}
}
}

function explain_rel() {
if ((Object.isUndefined(this.eta) || Object.isUndefined(this.patente)) {
return "\nAttenzione! L'eta' al conseguimento della patente è minore di quella attuale";
} else {
if (this.eta < this.patente) {
return "\nAttenzione! L'eta' al conseguimento della patente è minore di quella attuale";
} else {
return "";
}
}
}
E' tutto ok fino a quando c'è la prima seguenza di if della funzione controlla. Gli oggetti vengono istanziati correttamente solo che sembra che non si riescano a richiamare i metodi isValid e explain all'interno della funzione calcola.
Altra cosa: non so se è corretto usare Object.Undefined per verificare che il campo della form sia inserito o no.

E' probabile che ci siano molti errori sintattici e non solo, insomma è probabile che abbia fatto molto cagate , ma d'altronde sono a digiuno di javascript

Torav
29-03-2009, 15:25
ora ho parecchio da fare quindi ti do un consiglio al volo per debuggare il codice: installati l'estensione firebug di firefox che ti fornisce spiegazioni degli errori javascript nella pagina così puoi essere sicuro che non ci sono errori di sintassi o roba del genere. Se ancora non ti funziona quando ho 10 min liberi do un'occhiata al codice :)

Tzor
31-03-2009, 15:34
Non sono ancora riuscito a trovare il perchè non funziona, sembra una missione impossibile :muro: