LORETTA B. forum

Linguaggi di programmazione => Javascript => Topic aperto da: micdas - Maggio 22, 2009, 19:26:37

Titolo: invio dati da controllo select a controllo text
Inserito da: micdas - Maggio 22, 2009, 19:26:37
Mi trovo con questo problema, solo parzialmente risolto.
La mia necessità è quella di accodare in una casella di testo le varie voci scelte da una casella a discesa.
In un mormale form HTML ci sono riuscito, ma in un form dinamico creato con PHP non ci riesco perchè non riesco ad individuare la casella di testo.

La funzione JS è questa:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function JumpMenu(sel){
testo= document.pippo.accetta.value;
if(sel.selectedIndex!=0){
lnk=sel.options[sel.selectedIndex].value
if(lnk!=null){
document.pippo.accetta.value=testo + ", " + lnk;
}
else document.pippo.accetta.value="AAA";
}
else document.pippo.accetta.value="";
}

Questa funzione viene richiamata da un Form chiamato "pippo" in questo modo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<select size="1" name="type" class="form" onChange="JumpMenu(this)" style="font-size: 8 pt; font-family: Verdana">
Come è visibile da questa pagina (http://ilquadernodimike.altervista.org/prove/da_menu_a_casella.php) ci sono due semplice form:
uno in puro HTML ed uno uno in PHP.
Orbene quello HTML funziona, quello dinamico in PHP non riesco a farlo funzionare.

Immagino che alla funzione debba inviare anche il nome della casella di testo, essendo questa dinamica e quindi sempre con un nome diverso.
Questa casella di testo viene creata in questo modo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$nome_casella = "casella_testo";
echo "<input name=\"".$nome_casella."\" type=\"text\" id=\"".$nome_casella."\" size=\"50\">\n";


Ringrazio chi potrebbe risolvere questo problema  :tanks:.

Miky  :vittoria:   :ciao:
Titolo: Re: invio dati da controllo select a controllo text
Inserito da: HellDevil - Maggio 22, 2009, 22:18:53
Ciao micdas,
penso che devi sostituire tutti i nomi campi fissi con un getelementbyid, e mettere un parametro id nella select con lo stesso contenuto del parametro name, più o meno deve venire così:

PHP
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$nome_casella = "casella_testo";
echo "<form name=\"pluto\" method=\"post\" action=\"\">\n";
echo "<select size=\"1\" id=\"".$nome_casella."\" name=\"".$nome_casella."\" onChange=\"scrivi(this,$nome_casella)\">\n";
echo "<option selected>- SCEGLI -</option>\n";
echo "<option value=\"Marco\">Marco</option>\n";
echo "<option value=\"Giacomo\">Giacomo</option>\n";
echo "<option value=\"Giovacchino\">Giovacchino</option>\n";
echo "</select>\n";
echo "<input name=\"".$nome_casella."\" type=\"text\" id=\"".$nome_casella."\" size=\"50\">\n";
echo "</form>\n";

JS
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function scrivi(sel,casella){
testo= document.getElementById(casella).value;
if(sel.selectedIndex!=0){
    lnk=sel.options[sel.selectedIndex].value
    if(lnk!=null){
        document.getElementById(casella).value=testo + ", " + lnk;
    }
    else document.getElementById(casella).value="AAA";
    }
else document.getElementById(casella).value="";
}

oppure puoi usare il comando document.getElementsByName
che però ti restituisce un array di risultati quindi la tua funzione dovrebbe diventare:

PHP
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$nome_casella = "casella_testo";
echo "<form name=\"pluto\" method=\"post\" action=\"\">\n";
echo "<select size=\"1\" name=\"".$nome_casella."\" onChange=\"scrivi(this,$nome_casella)\">\n";
echo "<option selected>- SCEGLI -</option>\n";
echo "<option value=\"Marco\">Marco</option>\n";
echo "<option value=\"Giacomo\">Giacomo</option>\n";
echo "<option value=\"Giovacchino\">Giovacchino</option>\n";
echo "</select>\n";
echo "<input name=\"".$nome_casella."\" type=\"text\" id=\"".$nome_casella."\" size=\"50\">\n";
echo "</form>\n";

JS
Codice: Non sei autorizzato a vedere i links. Registrati o Login
function scrivi(sel,casella){
cas=document.getElementsByName(casella);
testo= cas[0].value;
if(sel.selectedIndex!=0){
    lnk=sel.options[sel.selectedIndex].value
    if(lnk!=null){
        cas[0].value=testo + ", " + lnk;
    }
    else cas[0].value="AAA";
    }
else cas[0].value="";
}

Diciamo che come soluzione nel tuo caso è più veloce la seconda (getElementsByName) ma sarebbe più corretto usare invece la prima soluzione (getElementById) in quanto il parametro id in una pagina html deve essere univoco, mentre il parametro name no.
Inoltre la prima soluzione ha un pò di problemi con internet explorer che, nonostante la funzione sia da standard W3C non è sempre supportata da IE.

Fammi sapere se risolvi così.  :okkey:
Titolo: Re: invio dati da controllo select a controllo text
Inserito da: micdas - Maggio 23, 2009, 13:48:36
Ciao HellDevil  :ciao:
Sono stato lieto di leggere la tua risposta e, prima di rispondere, l'ho testata nella mia pagina che puoi >>>vedere qui<<<   (http://ilquadernodimike.altervista.org/prove/da_menu_a_casella.php)
Purtroppo, come vedi testando la pagina e leggendo il codice in essa geneerata, non funge. A questo punto non so che fare perchè, se questo script non funziona, sarà difficile andare avanti nel mio lavoro
La cosa continua a funzionare solo nel primo form (quello HTML)   :pensare:  :pianto:
Titolo: Re: invio dati da controllo select a controllo text
Inserito da: HellDevil - Maggio 23, 2009, 14:22:21
Non sei autorizzato a vedere i links. Registrati o Login
Ciao HellDevil  :ciao:
Sono stato lieto di leggere la tua risposta e, prima di rispondere, l'ho testata nella mia pagina che puoi >>>vedere qui<<<   ([url]http://ilquadernodimike.altervista.org/prove/da_menu_a_casella.php[/url])
Purtroppo, come vedi testando la pagina e leggendo il codice in essa geneerata, non funge. A questo punto non so che fare perchè, se questo script non funziona, sarà difficile andare avanti nel mio lavoro
La cosa continua a funzionare solo nel primo form (quello HTML)   :pensare:  :pianto:


Trovato l'arcano  :Amm9:
il problema è come passi le variabili alla function sull'onchange, devi mettere il nome della textbox tra apici. Praticamente le chiamate delle function diventano:
nella prima function
<select size="1" id="Scelta1" name="Scelta1" onChange="scrivi_1(this,'casella_testo')">
nella seconda function invece
<select size="1" name="Scelta2" onChange="scrivi_2(this,'il_testo')">

Fammi sapere se risolvi  :vittoria:
Titolo: Re: invio dati da controllo select a controllo text
Inserito da: micdas - Maggio 23, 2009, 21:25:43
Perfetto HellDevil  :okkey:
Il mio guaio era che, se il codice HTML generato deve essere
onChange="scrivi_1(this,'casella_testo')

Per fare questo il codice PHP l'ho modificato da
onChange=\"scrivi_1(this,".$nome_casella.")\"
a così:
onChange=\"scrivi_1(this,'".$nome_casella."')\"
aggiungendo l'apice semplice ( ' ) nella stringa.

Ti ringrazio HellDevil. Così, come vedi sempre nello stesso esempio (http://ilquadernodimike.altervista.org/prove/da_menu_a_casella.php), mi hai fatto risolvere il problema ottenendo anche nei due form PHP lo stesso risultato che ottengo col primo form HTML

 :tanks:   :vittoria:   :okkey: