Newsgroup: it.comp.lang.javascript
Titolo: Come accedere a gli array!

Salve,
ho bisogno di un piccolo aiuto.
Non usa tantissimo javascript, lavoro con php, ma sto lavorando ad un
progetto dove javacript è necessario.
Devo realizzare uno script che effettui il controllo su i dati immessi
dagli utenti, ci sono una serie di 'select' con i rispettivi 'option'
che non possono avere valori incongruenti, per cui il mio script deve
controllare queste incongruenze modificando al volo i dati non
corretti, mi spiego meglio:
nel codice html, ci sono queste linee:
<select name="prova1[0]" onchange="check(
this.name
)">
 <option>qualcosa</option>
 ...
</select>
...
<select name="prova1[1]" onchange="check(
this.name
)">
 <option>qualcosa</option>
 ...
</select>
...
<select name="prova2[0]" onchange="check(
this.name
)">
 <option>qualcosa</option>
 ...
</select>
...
<select name="prova2[1]" onchange="check(
this.name
)">
 <option>qualcosa</option>
 ...
</select>
lo script ricevendo il nome della select dovrebbe controllare i valori
dei 'name' relativi e fare qualcosa...
cioe: selezionando il 'prova1[0]' deve controllare il valore di
'prova2[0]',
(premetto che ho usato gli array perche questi li devo elaborare in un
file tramite php):
il mio problema sta nel fatto che non riesco a ottenere il valore
dell'elemento che mi occore utilizzando il suo nome, uno script del
genere mi da un errore di oggetto non esistente:
function check(nome) {
  var valore=nome;
  if (document.name_form.valore.value=='qualcosa') {...}
  ...
}
come posso fare?
(l'ho risolto con una serie di if..., ma è troppo ridondante:
if (nome==prova1[0]) {
   if (document.nomeform.prova2[0].value=='...') {...}
}
...
if (nome==prova1[1]) {
   if (document.nomeform.prova2[1].value=='...') {...}
}
...
tra l'altro non posso accedere, alla stessa maniera, ai tipi 'radio',
che dal javascript sono degli array:
document.form.radio[0][0].value=='...' non llho acceta!!
spero di essere stato chiaro,
grazie per l'aiuto...
_dotTSim_

 ha scritto nel messaggio
news:dbbf35b6.03041...@posting.google.com...


 _dotTSim_
Prego
Gianni

...temevo di non essermi spiegato bene! scusate...
ci riprovo!
[prima di tutto non voglio assegnare il valore di prova[0] a 'name', ovviamente...
secondo, mi servono necessariamente gli array come nomi!]
Ecco una piccola parte del mio script:
...
          switch(nome) {
case "ord[1]": document.f.no_lav1[0].checked=true;break;
case "ord[2]": document.f.no_lav2[0].checked=true;break;
case "ord[3]": document.f.no_lav3[0].checked=true;break;
case "ord[4]": document.f.no_lav4[0].checked=true;break;
...
           }
in pratica vorrei eliminare tutti quei 'case':
ricevendo quindi ord[1] come faccio a mettere a true no_lav1[0]?
come faccio a prendere l'indice di ord (1), ed usarlo per referenziarmi a no_lav1?
ed ancora, se rilevo ord[2] come posso referenziare  no_lav2?
si puo fare? o lascio quella miridai di case:?
_dotTSim_

 si puo fare? o lascio quella miridai di case:?
Una cosa alla volta guarda se ci siamo capiti e poi...

 Non puoi assegnare un nome come "prova0" oppure "prova_0"
E perche' mai non si potrebbe fare?
Anzi e' una gran comodita' per chi usa php.
Per intenderci se in un form ho un campo con name="pippo", dopo la
spedizione in php ho una variabile di nome pippo che contiene il valore
spedito.
Se chiamo dei campi pippo[1], pippo[2], ecc. sul server avro' a disposizione
un array pippo con i valori dei rispettivi campi.
Vado a memoria perche' non conosco per nulla php, ma direi che gli indici
possono essere stringhe e ottenere anche array associativi (come in js) lato
server e che se non vengono specificati indici gli elementi dell'array
vengono ordinati secondo l'ordine del codice html.

...sembra che forse faccia al caso mio!
ma la devo provare...
all'inizio della prossima settimana ti faccio sapere, adesso non ho
proprio tempo (preche si tratta di un lavoro senza compenso!!!)
Gli array , come ha sottolineato Andrea, mi servono perche ottimizzano
molto la gestione di grosse variabili che si riferiscono a medesimi
oggetti logici, e funzionano proprio come javascript lato server...
io uso tantissimo PHP, ma in alcuni casi, come quello in cui mi sono
imbattuto,
javascript risulta necessario, altrimenti dovrei creare troppe "botte
e risposte" tra client e server...
a presto...
ti farò sapere come è andata
_dotTSim_

 Vado a memoria perche' non conosco per nulla php
In realta' solitamente si chiamano i name dei campi semplicemente con 
"pippo[]" senza specificare l'indice.
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"when you eliminate the impossible, whatever remains, however 
improbable, must be the truth" (S.H.)

 come posso fare?
Primo, ti conviene passare direttamente l'elemento, e non il name 
dell'elemento.
Ovvero:
<select name="prova2[1" onchange="check(this)">
function check(objSelect){
	if (objSelect.value=='qualcosa'){...}
}
cosi' elimini il problema alla radice.
Seconda di poi, quando in JS vuoi far riferimento a elementi forms con 
nomi particolari ti conviene usare tale sintassi:
document.nomeform.elements["prova1[]"].value etc..


> Non hai necessita' di specificare l'indice (per PHP, intendo).
 perche? 
riformulo il mio problema:
nel codice html ho una sequenza di 3 tipi di 'select',
per ogni sequenza uso un'array con lo stesso nome ma con indici
progressivi,
le tre sequenze hanno nomi diversi:
-prima sequenza: 
               <select name="prima[0]">...</select>
               <select name="prima[1]">...</select> 
               ...
               <select name="prima[n]">...</select>;
-seconda sequenza: 
               <select name="seconda[0]">...</select>
               <select name="seconda[1]">...</select> 
               ...
               <select name="seconda[n]">...</select>;
-terza sequenza: 
               <select name="terza[0]">...</select>
               <select name="terza[1]">...</select> 
               ...
               <select name="terza[n]">...</select>.
Ho la necessita di mantenere coordinati fra loro i valori scelti
tramite il select, per cui, se nel 'select' con nome 'prima[0]'
l'utente mi sceglie un valore 'x', nel 'select' con nome 'terzo[0]' il
valore che deve comparire deve essere y=f(x).
Utilizzando l'evento 'onchange' per ogni 'select' dovrei passare
l'indice dell'array, cosicche' posso facilemente referenziare il
'select' che deve coordinarsi, vorrei fare, insomma, una cosa del
genere:
<HTML>...
 <select name="prima[2]" onchange="check(this.value,2)>...
</HTML>
<SCRIPT>...
 function check(valore,indice) {
   if (valore=...) {
   document.nomeform.terza[indice].value=...
}
...
</SCRIPT>
E possibile fare una cosa del genere?
 quando l'interprete incontra
'document.nomeform.terza[indice].value=...',
 dice che terza[indice] non è un oggetto o non è stato definito?
Posso rinunciare a miei 10 mila switch/case e fare un codice piu
pulito?
o devo affidarmi solo al PHP?
_doTSim_

 "pippo[]" senza specificare l'indice.
Pero' e' possibile specificarlo prima o sono completamente andato?