Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problemi con Document

    Salve,
    sto realizzando una funzione generica per il controllo dei dati in una form.

    Questo è il codice:
    <SCRIPT type="text/javascript">
    function controllo_form(v_controll){
    //v_split = il parametro passato alla funzione
    var v_split = v_controll;
    //a_split = array che conterra' ogni riga del parametro, ovvero ogni campo da controllare
    var a_split = new Array();
    //divisione del parametro passato in micro parametri da controllare
    a_split = v_split.split(",");
    //nome_form = il nome della form da controllare
    nome_form = "document."+a_split[0]+"."+a_split[1];
    //form per controllare se ogni campo risulta compilato o corretto
    //il ciclo for inizia da 1 perche' il valore 0 e' il nome della form
    for (i=1;i<a_split.length;i++){
    //ricavo il tipo di controllo da eseguire
    alert(nome_form.type);
    }//close for
    }//close function controllo_form
    </script>

    La funzione la richiamo in questo modo:
    <input type="button" value="Invia" onClick="controllo_form('test,nome,cognome,sesso,t esto')">

    Il problema è che "nome_form.type" mi viene riconosciuto con undefinited.

    Da cosa può dipendere?
    Grazie!

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    alcune inesattezze:
    1) in quell' array tu hai stringhe, non oggetti
    e quando le concateni ad altre stringhe ottieni sempre una stringa
    nome_form = "document."+a_split[0]+"."+a_split[1];

    se vuoi ottenere l' oggetto corrispondente a quella stringa la devi far valutare con eval
    nome_form = eval("document."+a_split[0]+"."+a_split[1]);

    eval e' pero' considerato lento e si tende ad evitarlo ogniqualvolta si possa
    in questo caso e' semplice
    nome_form = document.forms[a_split[0]].elements[a_split[1]];

    2) occhio che il risultato qui sopra non e' un riferimento al form, basterebbe nome_form = document.forms[a_split[0]] equiparabile ad un document.nomeForm
    ma ad un elemento dello stesso, equiparabile ad un document.nomeForm.nomeElemento
    quindi rivedi sotto quest' ottica il tuo script

    3) il risultato di uno split e' un array, non occorre dichiararlo prima

    ciao

  3. #3
    Grazie non sai quanto mi hai semplificato la giornata!!!!

    Una curiosità come mai nel caso "nome_form.type" se è un tipo "radio" mi dice che è undefined?

    Grazie ancora!!!!!

  4. #4
    scusa.. ma non sono espertissimo.. ma non sarebbe meglio che tu

    codice:
    for (i=1;i<a_split.length;i++){
    //ricavo il tipo di controllo da eseguire
    alert(nome_form.type);}
    non è meglio

    codice:
    for (i=1;i<a_split.length;i++){
    //ricavo il tipo di controllo da eseguire
    alert(nome_form.method);}
    o name o un'altro che esiste..
    forse con il type volevi intendere il tipo di input all'interno del form.. così come fai tu controlli più form invece dei relativi controlli..

    nel caso vuoi controllare tutti i controlli del form prova così

    codice:
    var the_form = document.getElementById(FORNAME);
    for(var i=0; i< the_form.length; i++){
      var temp = the_form.elements[i].type;
    }
    argh... mi hai battuto sul tempo..

  5. #5
    perchè è un'altro array
    i radio solitamente sono più controlli con lo stesso nome quindi essendo una matrice di controlli dovrai controllarli con il checked

  6. #6
    XPaper-bat:
    Magari sbaglio, ma se utilizzo il tuo ultimo esempio, lui mi controlla tutti i campi della form.
    Quello che serve a me, che ancora non è implementato nel codice, è passare come stringa solo i campi ed un numero relativo ad un tipo di controllo che devo controllare.
    Per fare questo però ho bisogno di sapere che tipo di "input".
    Ripeto, magari sto affrontato male il problema.

    Grazie!

    Aggiungo:
    Grazie Paper-bat ora modifico subito!

  7. #7
    mh.. allora.. il mio consiglio (magari sbaglio e puoi buttarlo nel bidone.. vedi te )

    cmq metti come campo id="controllami" (non ricordo se vuole o meno le parentesi quadre quindi controllami[])
    e poi gli fai un ciclo su quell'array in modo da controllare semplicemente quelli con id controllami (spero per te che sia un controllo generale, della serie se c'è un valore o meno), in questo caso per i radio dovresti mantenerti il nome fino a che non trovi quello checked.. o qualcosa del genere.. spero di essere stato chiaro.. perchè forse non lo sono stato

    io cmq per questo tipo di cose utilizzo validation che è ottimo e anche abbastanza chiaro (forse un po' pesante

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    se sai che puo' verificarsi questa situazione prima del type di un elemento verificane la length:
    qualora presente piu' elementi condividono stesso name (quindi sono in un array) e per lavorare con essi dovrai ciclare per questa length, riferendoti ad essi come
    document.forms['nomeForm'].elements['nomeElement'][valoreNelCiclo]
    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.