22 messaggi dal 02 gennaio 2003
Io ho questo script java di questo tipo:

function NuovaQuantita() {
N = eval("document.CambiaQuantita.NumeroTotaleInput")

for (i=1;i<=N;i++){
codInput = eval("document.CambiaQuantita.txtCodiceInput" + i)
r=codInput.value

Righe= eval("document.CambiaQuantita.NumRighe" + r)
Colonne= eval("document.CambiaQuantita.NumColonne" + r)

NomeroTotale=NumeroTotale + ( Righe * Colonne )
}
alert(NomeroTotale.value)
}

Nel mio form c'è un numero variabile di righe. N è il numero totale di righe che ho nel form.codinput è il codice di una riga.
In ogni riga ci sono due input (Righe e Colonne).

I valori "Righe" e "Colonne" riesco a recuperarli e farli scrivere nell'alert, ma quando voglio scrivere il Numero Totale di celle , nell'alert ci viene scritto "undefined".

Sbaglio qualcosa nella sintassi della moltiplicazione?Oppure devo fare qualche conversione in tipo intero ?
Io di javascript nonci capisco niente, mi potete aiutare?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
con questa sintassi:
N = eval("document.CambiaQuantita.NumeroTotaleInput")

la variabile N non contiene un numero intero, ma è un puntatore al tuo campo NumeroTotaleInput. Quindi non essendo un numero, nell'istruzione successiva non è proprio esatto fare:

for (i=1;i<=N;i++){

perchè N non è propriamente un numero. Dovresti fare:

for (i=1;i<=Math.floor(N.value);i++){

la proprietà value ti tira fuori il contenuto del campo e il math floor lo trasfroma in numero.

La stessa cosa vale per le instruzioni successive:
Righe= eval("document.CambiaQuantita.NumRighe" + r)
Colonne= eval("document.CambiaQuantita.NumColonne" + r)
NomeroTotale=NumeroTotale + ( Righe * Colonne )

Le variabili Righe e Colonne non sono interi, ma sempre puntatori. Anche qui manca la proprietà value. Correggi così:

Righe= eval("document.CambiaQuantita.NumRighe" + r)
Colonne= eval("document.CambiaQuantita.NumColonne" + r)
NomeroTotale=NumeroTotale + ( Math.floor(Righe.value) * Math.floor(Colonne.value) )

Poi... NumeroTotale (in un punto hai sbaglato a digitare, c'è scritto nOmeroTotale) cos'è? Dove lo valorizzi? Dovrebbe essere il nome di un campo ma allora anche qui manca la proprietà value. Correggi così:
NumeroTotale.value = Math.floor(NumeroTotale.value) + ( Math.floor(Righe.value) * Math.floor(Colonne.value) )

ciao

Enjoy learning and just keep making
22 messaggi dal 02 gennaio 2003
Io ho preveto a fare come mi hai detto e in parte funziona.
se stampo il valore direttamente nel campo del form(NumeroTotale) funziona:

NumeroTotale.value = ( Math.floor(Righe.value) * Math.floor(Colonne.value) )

però se io metto ivalori in una variabile non funziona piu e mi scive undefined

Numero=( Math.floor(Righe.value) * Math.floor(Colonne.value) )
NumeroTotale.value= Numero.value
ho provato anche a scrivere

NumeroTotale.value= Numero

Ma se non uso la variabile non riesco a fare il ciclo.
11.886 messaggi dal 09 febbraio 2002
Contributi
allora...
bisogna fare distinzione tra oggetti e variabili.
Un campo di un form come NumeroTotale è un oggetto che ha proprietà e metodi (sono le due caratteristiche più "famose" della programmazione orientata agli oggetti).

Una variabile non ha proprietà e metodi di per sè. La variabile è un contenitore di valori, oggetti o altre variabili.
Se tu ci butti dentro un valore, es:

miavariabile = 5

miavariabile non ha alcun metodo vale 5 e basta. Se invece fai:
miavariabile = eval("document.CambiaQuantita.NumeroTotaleInput")
allora si, puoi usare la sintassi miavariabile.value perchè la variabile CONTIENE UN OGGETTO che ha la proprietà .value

Riprendiamo il codice:
Numero=( Math.floor(Righe.value) * Math.floor(Colonne.value) )
NumeroTotale.value= Numero.value

nella prima linea valorizzi la variabile Numero con un valore (non-oggetto) nella seconda non puoi usare la proprietà value perchè Numero non è un oggetto.
Infatti poi hai scritto giusto:
NumeroTotale.value= Numero

così deve funzionare... perchè scrivere questo:

NumeroTotale.value = ( Math.floor(Righe.value) * Math.floor(Colonne.value) )

oppure scrivere:

Numero = ( Math.floor(Righe.value) * Math.floor(Colonne.value) )
NumeroTotale.value = Numero

è assolutamente equivalente.
Forse nella pagina hai qualche altra cosa che si chiama "Numero" e allora potrebbe generarsi confusione tra i nomi... occhio a non chiamare mai due cose con lo stesso nome,
Se non riesci a risolvere il problema posta il codice dell'intero ciclo. Ciaoo


Enjoy learning and just keep making
22 messaggi dal 02 gennaio 2003
Funziona, sei un GRANDE!

Visto che ci siamo, è possibile scrivere anche il risultato parziale di ogni riga?
(ricordando che il numero di righe è variabile e le righe sono identificate con un codice).

Se per prelevare i valori si fa cosi:

codInput = eval("document.CambiaQuantita.txtCodiceInput" + i)
Righe= eval("document.CambiaQuantita.NumRighe" + codInput.value )


esiste un modo anche per fare il viceversa, ossia inserire i valori che ho calcolato negli input ?

<input name=Riga<%=codInput%> type="text">

una cosa del genere...

document.Nomeform.Riga(+codInput).value= NumeroParziale

scusa la mostruosità che ho scritto.



11.886 messaggi dal 09 febbraio 2002
Contributi
:)
eheh non è una mostruosità, ti sei avvicinato alla soluzione.
Ricorda sempre che puoi usare eval: questa funzione "valuta" (letteralmente) quello che gli passi come parametro.

Se io scrivo:

eval("pippo")

il javascript va cercando all'interno dello script qualche variabile o oggetto che si chiama "pippo" e se lo trova ti restituisce il suo contenuto (valore).
Guarda quello che hai scritto:
eval("document.CambiaQuantita.txtCodiceInput" + i)
questo serve a "catturare" un qualcosa nella pagina che si chiama document.CambiaQuantita.txtCodiceInput5
Così a posto di questo:

document.Nomeform.Riga(+codInput).value= NumeroParziale

basta che ci metti

eval("document.Nomeform.Riga"+codInput).value = NumeroParziale

così dovrebbe andare.... ciao

Enjoy learning and just keep making
22 messaggi dal 02 gennaio 2003
Si funziona. Grazie mille dell'aiuto !
ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.