LORETTA B. forum
Linguaggi di programmazione => Javascript => Topic aperto 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:
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:
<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:
$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:
-
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
$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
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
$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
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:
-
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:
-
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:
-
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: