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

    inserire variabile al posto di nome form

    Devo scrivere una funzione che abilita un campo testo alla pressione di un determinato elemento di una tendina select. Vorrei passare il nome del campo testo come parametro, in modo da non dover scrivere una funzione apposta per ogni tendina, visto che ne devo fare un po'.

    Questa è la funzione PHP che genera la tendina da una query (già funzionante).

    Codice PHP:
    function TendinaDaQuery($risultato$testo)
                {
                    echo 
    "<select name='selezione' onchange='javascript:abilita(this.options[this.selectedIndex].value,$testo)'>";
                    
    $i=1;
                    while (
    $vett mysql_fetch_array($risultato,MYSQL_BOTH))
                    {
                        echo 
    "<option value='$i'>$vett[0]</option>";
                        
    $i++;
                    }
                    echo 
    "<option value='0'>Altro</option>";
                    echo 
    "</select>";
                    echo 
    "<input type='text' name='$testo' disabled>";
                    echo 
    "
    "
    ;
                } 
    la funzione abilita() :

    <script language="JavaScript">

    function abilita(ValoreSelect,nome)
    {
    if (ValoreSelect=="0")
    {
    document.modulo.nome.disabled=false;
    }
    else
    {
    document.modulo.nome.disabled=true;
    }
    }

    </script>

    il mio obiettivo è quello di avere al posto di "nome" nella riga document.modulo.nome.disabled=.. il name del campo testo, passato come parametro. Si può fare?

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    piu' elegantemente, onchange passa this ed il nome del campo da abilitare/disabilitare come argomenti
    nella funzione ti ricavi il
    argomentoThis.options[argomentoThis.selectedIndex].value
    il form sara' argomentoThis.form, il campo sara' argomentoThis.form.elements[argomentoNome]

    ciao

  3. #3
    Originariamente inviato da Xinod
    piu' elegantemente, onchange passa this ed il nome del campo da abilitare/disabilitare come argomenti
    nella funzione ti ricavi il
    argomentoThis.options[argomentoThis.selectedIndex].value
    il form sara' argomentoThis.form, il campo sara' argomentoThis.form.elements[argomentoNome]

    ciao
    ehm non credo di aver capito molto bene.. anzi

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    A parte che ti sconsiglio di creare in quel modo la select.
    E' un metodo lento e brutto.
    Usa le funzioni dom con i vari document.createElement etc etc sono piu' eleganti e sono piu' facilmente interagibili e modificabili.

    Inoltre usando l'evento onchange puoi lanciare in maniera asincrona la relativa funzione di controllo degli altri elementi della pagina.

    QUello che nerevar ha scritto riguarda il metodo di accesso alle opzioni della select.

    IN javascript l'oggetto select e' un puntatore ad una struttura dati che contiene un array che rappresenta le "<option ..></option>" che vai hai scritto.

    Per accedervi e' sufficiente recuperare il nodo della select tramite document.forms oppure docuemnt.getElementById oppure passandolo direttamente con la keyword "this" da metodo
    ad esempio

    <select name="test" id="testId" onchange="faiCose( this )" >....</select>

    la funzione fai cose passa this come parametro ossia il riferimento al nodo select stesso.

    quindi nella funzione avremo

    Codice PHP:

    function faiCosesel )
    {
         if(
    sel.options)
         {
              
    //Vediamo cosa e' stato selezionato
              
    alert"Selezionato : "+sel.options[sel.selectedIndex] );
         }

    Tanto per spiegare meglio

    sel.options => riferimento all'array delle opzioni interno al nodo select
    sel.selectedIndex => campo interno del nodo select contenente il corrente valore dell'indice selezionato nella select

    quindi da forza di cose per accedere ad un campo di una arrayq aundo hai le 2 cose come sopra sei apposto e' come fare
    var a = new Array( 1,2,3,4,5,6,7,8,9,0);

    alert( a[4] );

    se facciamo
    var a = sel.options;
    var index = sel.selectedIndex;

    alert( a[index] );

    E' esattamente la stessa cosa che fare
    sel.options[sel.selectedIndex];

  5. #5
    Ho letto e riletto quello che avete scritto, ma forse mi sono espresso male io.
    Sul fatto che come metodo è lento e brutto sono d'accordissimo, ma non avendo conoscenze sul DOM è l'unico metodo che mi è venuto in mente.. Appena avrò tempo mi documenterò su questo DOM e cercherò un metodo migliore.

    Il fatto è che non mi avete risposto, o almeno credo, alla mia domanda:
    io voglio accedere a un campo testo il cui nome viene passato come variabile alla funzione javascript, in modo da non dover scrivere 26 funzioni x avere 26 campi testo.

    Ho provato a fare così:

    function abilita(ValoreSelect, id)
    {
    if (ValoreSelect=='0')
    {
    document.modulo.getElementById(id).disabled=false;
    document.modulo.getElementById(id).select();
    document.modulo.getElementById(id).focus();
    }
    else
    {
    document.modulo.getElementById(id).disabled=true;
    }
    }


    Non funziona... Cosa sbaglio?

  6. #6
    ho provato anche a fare così, al posto di chiamare una funzione scrivere tutto direttamente nella onchange, ma in questo modo non viene abilitato il campo testo.

    echo "<select name='selezione' onchange='if(this.selectedIndex=='0'){document.mod ulo.".$testo.".disabled=false;document.modulo.".$t esto.".select();document.modulo.".$testo.".focus() ;}else{document.modulo.".$testo.".disabled=true;}' >";

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    qui non metti i backslash davanti agli apici singoli
    <select name='selezione' onchange='if(this.selectedIndex==\\'0\\') etcetc...
    che poi il selectedIndex non e' una stringa ma un intero, quindi puoi togliere proprio gli apici
    <select name='selezione' onchange='if(this.selectedIndex==0) etcetc...

    comunque torniamo all' inizio

    echo "<select name='selezione' onchange='abilita(this,\"".$testo."\")'>";
    codice:
    function abilita(sel,nomeCampo){
      var campo=sel.form.elements[nomeCampo];
      if(sel.selectedIndex==0){
        campo.disabled=false;
        campo.select();
        campo.focus();
      }
      else campo.disabled=true;
    }
    questo e' quanto ho scritto nel mio primo messaggio, che risponde alla tua richesta
    voglio accedere a un campo testo il cui nome viene passato come variabile alla funzione javascript, in modo da non dover scrivere 26 funzioni x avere 26 campi testo.
    ciao

  8. #8
    grazie, ora funziona.

    Però nel tuo codice c'è un errore, fai la selezione su sel.selectedIndex, mentre io la devo fare sul value visto che le tendine sono caricate dinamicamente e non posso sapere che indice avrà la option "Altro". Per questo ho assegnato alla option altro value=0 e alle altre il value si carica dal db, con la chiave primaria chè è un int auto-increment.

    In pratica ho dovuto cambiare la condizione dell'if: da "if(sel.selectedIndex==0)" a if(sel.value==0)

    grazie mille dell'aiuto comunque

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.