Newsgroup: it.comp.lang.javascript
Titolo: Passare un valore da una combobox ad uno script.

Dovrei passare un valore di una combobox ad uno script. La combobox ha tre
opzioni, con valore numerico.
<SELECT NAME="mesi" SIZE="1" ONCHANGE="mese(this)">
<OPTION VALUE="12">12 mesi</OPTION>
<OPTION VALUE="8">8 mesi</OPTION>
<OPTION VALUE="4">4 mesi</OPTION> 
</SELECT>
Questo e' lo script che dovrebbe dare al top.mesi il valore numerico:
<SCRIPT>
function mese(obj) {
top.mesi=obj.value
}
</SCRIPT>
Tuttavia, quando vado a calcolare l'importo 
mi ritorna l'errore "top.mesi is not a number".
Come faccio ?
PS. Con Text Field e Radiobox nessun problema...
Ciao
Roberto
--
i dati negli header sono modificati. Per rispondere
in email sostituire katanga con usa.
Nuova pagina sulle previsioni del tempo
http://www.geocities.com/MotorCity/Downs/5794
Anteprima sulla nuova patente !!!
http://utenti.tripod.it/aut_marche
--------------------------------------------                                      


<SCRIPT>
function mese(obj) {
top.mesi=obj.value
troppo facile !!!!
document.nomeform.mesi.options[0].value
serve per accedere alla proprietą value della prima option
ecc.ecc.

ecc.ecc.
Ah... ho fatto cosi e ora funziona:
function mese(month) {
var selection = document.form.mesi.selectedIndex;
if (selection==1) top.mesi=document.form.mesi.options[1].value;
else if (selection==2) top.mesi=document.form.mesi.options[2].value;
else if (selection==3) top.mesi=document.form.mesi.options[3].value;
}
C'e' un metodo piu' elegante ?
Ora una curiosita'. Devo arrotondare il numero all'unita' (se 80,5 -> 80, se
80,501 -> 81). Con Math.round se 80,5 -> 81... da che valore il numero viene
arrotondato in eccesso ? Se, per esempio 80,48, vale sempre 81 ? 
Comunque... per fartene un'idea (calcolo del bollo auto) vedi al sito
http://utenti.tripod.it/aut_marche/
. Forse al Ministero delle Finanze hanno
fatto male i calcoli.


usa Math.round() al posto di Math.floor()
CIAO :)
la mosca nella rete


Ciao


Mi spiace smentirti, ma ho provato ad arrotondare 50.49 con round() e mi dà
50 e non 51
Math.round() arrontonda un numero all'intero più vicino.
Quindi 4.2 diventa 4 e 4.8 diventa 5
Math.floor() arrotonda un numero all'intero inferiore o uguale (praticamente
tronca i decimali)
Quindi 4.4 diventa 4 e 4.8 diventa sempre 4
OK?

OK?
Si ma non risolve a pieno il mio problema. Se ho 50.5 devo arrotondarlo a 50
e non a 51...
Prova a immaginare... motociclo di 15 Kw... bollo di lire 62.500 che deve
essere arrotondato a 62.000... (l'importo risultante a seguito del calcolo
va arrotondato alle mille lire inferiori se la frazione e' fino a L. 500,
alle mille lire superiori se la frazione e' superiore a L.500).
Come hanno fatto a fare una cappella simile alle Finanze ? Mi immagino i
loro pc che poi dovranno verificare se il pagamento e' regolare...


Probabilmente quelli delle finanze hanno voluto farci un regalo ... di
solito 0.5 viene sempre arrotondato a 1 con questo tipo di arrotondamento.
Ma basta che sia 0.49999999 per essere arrotondato a 0.
Puoi fare cosě, per mantere uno script piů "pulito".
var prezzo = 49500
prezzo = arrotonda(prezzo)
nella funzione arrotonda(), che avrai definito prima, non fai altro che fare
questo:
function arrotonda(prezzo)
{
    prezzo --
    prezzo /= 100
    prezzo = Math.round(prezzo)
    prezzo *= 100
    return prezzo



Ciao
Roberto
--
i dati negli header sono modificati. Per rispondere
in email sostituire katanga con usa.
Nuova pagina sulle previsioni del tempo
http://www.geocities.com/MotorCity/Downs/5794
Calcolo del bollo on line
http://utenti.tripod.it/aut_marche
--------------------------------------------                                      

Sai cosa esce, vero ? ;-(
si che lo so, ma non ho capito che cosa vuoi fare.
top.anno è l'anno attuale o quello della text field?
top.scadenza deve valere l'anno dopo se è inferiore a quello attuale?
dimmi di più ...
CIAO :)




CIAO :)


Mmm, avendo preso il valore da una text field, presumo che JavaScript lo
gestisca come stringa.
prova a vede se funzia questo:
top.scadenza = eval(top.mese+1)
oppure
top.scadenza = eval(top.mese + "+1")
La funzione eval() permette di valutare le espressioni all'interno delle
stringhe, restituendo il risultato come numero
CIAO :)

stringhe, restituendo il risultato come numero
Infatti, avevo fatto diverse prove... pero' mi hai acceso la lampadina:
top.scadenza=eval(top.mese) +1  ! :-)
Per ora e' tutto... e grazie mille.


io uso da sempe le funzioni dell'oggetto Math senza problemi (client side).
Forse dipende anche dal server ... per esempio i sistemi operativi UNIX non
consentono la generazione di numeri casuali - funzione Math.random().