Visualizzazione risultati 1 fino 16 di 16

Discussione: [JS] Recuperare valore di un campo del form

  1. #1
    Guest

    Predefinito [JS] Recuperare valore di un campo del form

    Allora io js l'ho sempre odiato... E questa è una conferma...

    Ho un form composto da campi di vario tipo...

    Ci sono 2 radio che gestiscono, in base alla loro selezione, l'attivazione o la disattivazione di alcuni campi...

    I campi hanno come name una array di questo tipo

    Codice:
    <input type="text" name="form[campo1]" />
    mentre i controlli radio hanno
    Codice:
    <input type="radio" name="form[switch]" value="0" onChange="funzioneJs();" />
    <input type="radio" name="form[switch]" value="1" onChange="funzioneJs();" />
    Il problema sta che quando provo a recuperare il valore del campo radio, mi da errore...

    Lo recupero così:

    Codice:
    function funzioneJs()
    {
    var type = document.nome_form.form[switch].value();
    }
    Ora, dove sbaglio?!

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ci sono due errori:
    - il primo è che non puoi usare le quadre nel dare un nome all'attributo, chiamalo semplicemente my_switch (switch non va bene, ti darebbe errore in JS perché è una parola chiave)
    - il secondo è che il valore si recupera in questo modo:
    Codice:
    var selIdx = document.nome_form.my_switch.selectedIndex;
    var result = document.nome_form.switch[selIdx].value;
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Codice:
    <form action="registrati.php" name="registrati" method="post">
    <input type="hidden" name="form[do]" value="1" />
    <table width="75%" border="0" cellspacing="0" cellpadding="3" class="tblcontent">
      <tr> 
        <td colspan="2" align="right"><b><u>Modulo registrazione Cliente</u></b><br /><br /></td>
      </tr>
      <tr> 
        <td colspan="2" align="right"><input type="radio" name="form[cliente]" value="ditta" onChange="switchRegistrati();" />Ditta <input type="radio" name="form[cliente]" value="privato" onChange="switchRegistrati();" checked />Privato</td>
      </tr>
    Codice:
    function switchRegistrati()
    {
    	var selIdx = document.registrati.cliente.selectedIndex;
    	var result = document.registrati.cliente[selIdx].value;
    }
    Firefox mi da come errore:
    Codice:
    document.registrati.cliente[selIdx] has no properties
    Non capisco perchè...

  4. #4
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    Scusate se mi intrometto, ma non dovrebbe essere:

    Codice:
    function switchRegistrati()
    {
    	var selIdx = document.registrati.cliente.selectedIndex;
    	var result = selIdx.value;
    }
    Spero di non aver sparato una vaccata da post inutile ...
    è un po che non uso JS

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da mythologia
    Scusate se mi intrometto, ma non dovrebbe essere:

    Codice:
    function switchRegistrati()
    {
    	var selIdx = document.registrati.cliente.selectedIndex;
    	var result = selIdx.value;
    }
    Spero di non aver sparato una vaccata da post inutile ...
    è un po che non uso JS
    Mi da lo stesso errore...

  6. #6
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    Bhe... allora non ricordo... meglio attendere demential

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ho notato che selectedIndex funziona solamente con le SELECT, non con i pulsanti radio. Per cui l'unico modo per trovare l'opzione segnata è esaminarle tutte e vedere quella contrassegnata:
    Codice:
    var user_input = -1;
    for (i=0;i<document.nome_modulo_my_switch.length;i++) {
    	if (document.nome_modulo.my_switch[i].checked) {
    		user_input = document.nome_modulo.my_switch[i].value;
    	}
    }
    (adattato da: http://www.quirksmode.org/js/forms.html#sradio)

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Ho notato che selectedIndex funziona solamente con le SELECT, non con i pulsanti radio. Per cui l'unico modo per trovare l'opzione segnata è esaminarle tutte e vedere quella contrassegnata:
    Codice:
    var user_input = -1;
    for (i=0;i<document.nome_modulo_my_switch.length;i++) {
    	if (document.nome_modulo.my_switch[i].checked) {
    		user_input = document.nome_modulo.my_switch[i].value;
    	}
    }
    (adattato da: http://www.quirksmode.org/js/forms.html#sradio)

    Statemi bene...
    Il problema è che io nel mio modulo uso per i nomi dei campi un'array (mi è più comodo poi lavorarci nella parte server) e sto impazzendo perchè non vuole saperne di funzionare...
    Non è che mi correggeresti il codice che hai gentilmente postato per lavorare con i campi sotto forma di array?

    Grazie per la pazienza...

  9. #9
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Prova a vedere se ti funziona così, ma ho i miei dubbi:
    Codice:
    var user_input = -1;
    for (i=0;i<document.nome_modulo.form[cliente].length;i++) {
    	if (document.nome_modulo.form[cliente][i].checked) {
    		user_input = document.nome_modulo.form[cliente][i].value;
    	}
    }
    Se non ti funziona, riconsidera la funzione per cui usi JavaScript: se è per un controllo dei dati, forse ti conviene farlo tramite server e ristampare tutta la pagina in caso di fallimento. È una soluzione un po' più elegante e decisamente meno eludibile...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  10. #10
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Dunque... con un name del genere non penso proprio che gli piaccia la forma:
    document.nome_modulo.form[cliente]
    mettendomi nei panni di un parser javascript, tenterei di cercare un unico campo di nome "form", da considerare come array e prendere l'elemento indicato da una certa variabile "cliente".. che probabilmente neanche è definita.

    Mi chiedevo:
    1) visto che a te serve il riferimento del campo in una funzione js da chiamare ad un loro evento, cioè come indicavi:
    <input type="radio" name="form[switch]" value="1" onChange="funzioneJs();" />

    2) E visto che il problema sta nel trovare il modo di referenziare questo campo al suo interno...

    perché semplicemente non passi "this" alla funzione???


    ovvero:
    <input type="radio" name="form[switch]" value="1" onChange="funzioneJs(this);" />

    e poi nella function:

    function funzioneJs(field)
    {
    var type = field.value;
    ...etc.. immagino dovrai fare altro...
    }
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Prova a vedere se ti funziona così, ma ho i miei dubbi:
    Codice:
    var user_input = -1;
    for (i=0;i<document.nome_modulo.form[cliente].length;i++) {
    	if (document.nome_modulo.form[cliente][i].checked) {
    		user_input = document.nome_modulo.form[cliente][i].value;
    	}
    }
    Se non ti funziona, riconsidera la funzione per cui usi JavaScript: se è per un controllo dei dati, forse ti conviene farlo tramite server e ristampare tutta la pagina in caso di fallimento. È una soluzione un po' più elegante e decisamente meno eludibile...

    Stammi bene...
    Credo che porterò il controllo lato server, in effetti è molto più sicuro

    Citazione Originalmente inviato da heracleum
    Dunque... con un name del genere non penso proprio che gli piaccia la forma:
    document.nome_modulo.form[cliente]
    mettendomi nei panni di un parser javascript, tenterei di cercare un unico campo di nome "form", da considerare come array e prendere l'elemento indicato da una certa variabile "cliente".. che probabilmente neanche è definita.

    Mi chiedevo:
    1) visto che a te serve il riferimento del campo in una funzione js da chiamare ad un loro evento, cioè come indicavi:
    <input type="radio" name="form[switch]" value="1" onChange="funzioneJs();" />

    2) E visto che il problema sta nel trovare il modo di referenziare questo campo al suo interno...

    perché semplicemente non passi "this" alla funzione???


    ovvero:
    <input type="radio" name="form[switch]" value="1" onChange="funzioneJs(this);" />

    e poi nella function:

    function funzioneJs(field)
    {
    var type = field.value;
    ...etc.. immagino dovrai fare altro...
    }
    Già fatto, mi da sempre lo stesso problema... E' come se non volesse i name degli input come array... Bhò...

  12. #12
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Uhm, mi sembra veramente poco probabile che abbia problemi con il solo "this" (che non dipende affatto dal nome, anzi potrebbe anche tranquillamente non esserci)..

    se vuoi passare al controllo lato server ok..
    però per pura cronaca -se vuoi- posta il codice che hai provato con il this (è probabile che c'erano altri errori) perché sono sicuro che possa funzionare senza problemi.
    Come vuoi.
    Ultima modifica di heracleum : 18-06-2007 alle ore 09.40.43
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da heracleum
    Uhm, mi sembra veramente poco probabile che abbia problemi con il solo "this" (che non dipende affatto dal nome, anzi potrebbe anche tranquillamente non esserci)..

    se vuoi passare al controllo lato server ok..
    però per pura cronaca -se vuoi- posta il codice che hai provato con il this (è probabile che c'erano altri errori) perché sono sicuro che possa funzionare senza problemi.
    Come vuoi.
    NON E' POSSIBILE!!!!!! HO FATTO 2.000.000 VOLTE CON IL THIS UGUALE UGUALE AD ADESSO E ORA VA!!!!!!!

    Io lo odio sempre di più a Js...

    Ps: Probabilmente facevo altri errori

    Ok, ora è andata il check sulla selezione, ma ora gli altri campi da processare secondo la scelta come li recupero?

    document.registrati.form[nome_campo].value; ?

  14. #14
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Le regole in teoria sono queste:

    - per i campi text, password, hidden e textarea puoi estrarre il valore con la sintassi document.nome_modulo.nome_campo.value;
    - per le checkbox (caselle quadrate) l'unica cosa che puoi fare è verificare se la casella è segnata quando document.nome_modulo.nome_casella.checked è diverso da 0
    - per i pulsanti radio, devi cercare l'opzione selezionata come spiegato sopra
    - per le select, devi usare due righe: var selIdx = document.nome_modulo.nome_select.getSelectedIndex( ); var value=document.nome_modulo.nome_select[selIdx].value;

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Le regole in teoria sono queste:

    - per i campi text, password, hidden e textarea puoi estrarre il valore con la sintassi document.nome_modulo.nome_campo.value;
    - per le checkbox (caselle quadrate) l'unica cosa che puoi fare è verificare se la casella è segnata quando document.nome_modulo.nome_casella.checked è diverso da 0
    - per i pulsanti radio, devi cercare l'opzione selezionata come spiegato sopra
    - per le select, devi usare due righe: var selIdx = document.nome_modulo.nome_select.getSelectedIndex( ); var value=document.nome_modulo.nome_select[selIdx].value;

    Stammi bene...
    Il problema sta nel fatto che il nome del campo a me è in una array e mi rompe perchè mi dice che non è una vabiabile dichiarata e non so come fargli capire che quello è un campo e non una array di js...

  16. #16
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Tranquillo, stai sereno
    abbi fede, pensi che ti lasciamo senza soluzioni ulteriori?

    Inizialmente pensavo di indicarti subito l'ulteriore soluzione alla prima risposta.. poi ho visto che (apparentemente) ti serviva solo un riferimento ad un campo in una function invocata da un evento del campo stesso, quindi ho indicato solo la soluzione del this (pulita comunque).

    Ora, visto che ti serve comunque ottenere riferimenti a quei campi con quei nomi assurdi (che causano conflitti richiamandoli direttamente alla "vecchia maniera") procediamo con la soluzione efficace anche in situazioni estreme.

    al posto di:
    var valore = document.nome_form.form[campo1].value;

    puoi usare:
    var valore = document.getElementsByName('form[campo1]')[0].value;

    visto che getElementsByName ritorna una collezione di oggetti aventi lo stesso nome quel [0] che vedi indica che prende in considerazione il primo (e spero unico) campo con quel nome. Visto che il nome del campo è indicato come una stringa non si ha il conflitto con la sintassi javascript di cui sopra.



    (only 110 messages left)
    Ultima modifica di heracleum : 19-06-2007 alle ore 16.41.40
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •