Newsgroup: it.comp.lang.javascript
Titolo: Php e Javascript , piccolo problema

Salve a tutto il Newsgroup.
Ho un piccolo problema, secondo me banale,  ma poichè non ho molte
conoscenze in javascript, non riesco a venirne a capo, forse qualcuno
di voi lo ha gia affrontato o sicuramente usato.
Ho un form (method get)con un textbox (box1) , una seria di bottoni
radio (btradio) caricati dinamicamente con mysql , e un'ultima
textbox(box2)
Vorrei che il valore dell'ultima textbox cambi automaticamente , senza
ricaricare la pagina , facendo una somma tra la prima textbox ed il
valore caricato dinamicamente dei bottoni radio.
Il problema puo' essere risolto aggironando la pagina tramite un
pulsante, ma vorrei che questo valore cambiasse senza ricaricare la
pagina.
Ho scritto questa finzione in javascript :
<script  language="javascript">
function somma()
{
document.form.box2.value=(document.form.box.value
+document.form.btradio.value)}
</script>
all'evento onclick del bottone radio ho aggiunto onclick="somma()"
</script>
Fin qui tutto ok , ma quando vado per scegliere il valore dei bottoni
radio mi da il valore della box1 con undefinited
La cosa non sussiste se al pezzo di javascript inserisco
document.form.submit poichè ricarica la pagina.
Come posso risolvere questo problema senza ricaricare la pagina ed
utilizzando solo javascript ?
Grazie a tutti voi

 Fin qui tutto ok
Tutto ok? stranissimo, secondo me dovrebbe segnalare errore
Prova un po'.
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 +document.form.btradio.value)}
Presupponendo che tu abbia una "form" che abbia come name "form"...
cambiale nome: rischi di incasinarti poi con parole chiave di js.
Inoltre, prima parli di "box1" e poi qui fai riferimento a "box". Non è ben
chiaro.
In aggiunta, se la "serie di radio" ha name "btradio", significa che tu hai
un array di elementi, ergo "btradio.value" ti restituirà "undefined",
perché btradio è un array e un array non ha proprietà value. Devi prima
recuperare il radio spuntato e poi da lì il suo value.
E per finire, così non stai facendo una somma ma una concatenazione di
stringhe.
Quindi, presupponendo un codice HTML del genere:
<form method="get" action="">
	<input type="text" name="box1" value="" />
	<input type="text" name="box2" value="" />
	<input type="radio" name="btradio" value="1" />
	<input type="radio" name="btradio" value="2" />
	.
	.
	.
	<input type="radio" name="btradio" value="10" />
	<input type="button" value="somma" onclick="somma(this.form)" />
</form>
<script type="text/javascript">
function somma(f){
	var iRadValue=0;
 
	for (var i=0;i<f.btradio.length;i++)
		if (f.btradio[i].checked){
			iRadValue=+f.btradio[i].value;
			break;
		}
	f.box2.value=+f.box1.value + iRadValue;
}
Scritta al volo, ma il concetto è più o meno questo.
Volendo potresti anche controllare che btradio sia effettivamente un array,
in quanto sono una serie di controlli generati dal server e quindi
idealmente potrebbe andare da uno a "n"; ma essendo un "radio" ho supposto
che di uno solo te ne saresti fatto ben poco; difatti questo genere di
controllo solitamente si fa per i checkbox.
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è
necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP.
Qualcosa deve essere andato storto."

ZER0 ha scritto:

Grazie a tutti e due per i consigli che mi avete dato.
ZERO la funzione che hai postato ha centrato in pieno in mio problema.
Infatti ho utilizzato il codice che hai posato ed ho cambiato quanto
necessario per il suo funzionamento.
E cosi il valore dei bottoni radio ( caricati automaticamente da mysql
) viene preso da iradvalue e sommato con la prima text box.
avendo un po di dimestichezza con PHP , ho capito subito la tua
funzione.
Grazie tanto... ;-) a buon rendere... 
Ciao

sandro ha scritto:

un'ultima cosa che potrebbe servire a chi ha bisogno di questa funzione
al posto di
f.box2.value=+f.box1.value + iRadValue
ho corretto cosi'
f.box2.value= Number(f.box1.value) + Number(iRadValue)
Grazie ancora a tutti ed in special modo a ZERO ;-)

 f.box2.value= Number(f.box1.value) + Number(iRadValue)
Non c'era bisogno di modificare il codice, il "+" davanti a "f.box1.value"
ha proprio il significato di trasformare la stringa in numero e iRadValue è
già numerico come valore (in quanto viene applicato lo stesso meccanismo
durante la sua assegnazione).
