Risultati da 1 a 7 di 7

Visualizzazione Elencata

Messaggio precedente Messaggio precedente   Nuovo messaggio Nuovo messaggio
  1. #1
    Burrasca forte L'avatar di alb
    Data Registrazione
    03/01/08
    Località
    Hamburg - DE
    Età
    38
    Messaggi
    8,346
    Menzionato
    4 Post(s)

    Predefinito Javascript: non riesco a far funzionare questo script

    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:
    Codice:
    <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:
    Codice:
    //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
    Ultima modifica di alb; 28/03/2009 alle 13:40
    Hamburg - Germania
    Occasionalmente a
    Berbenno (BG) - 630 m slm (45°81' N, 9°57' E)

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •