Newsgroup: it.comp.lang.javascript
Titolo: Re: [CROSS] Accesso a campi text

 document.getElementById("nomedelform").elements["array[]"][2] //per accedere al secondo elemento
Anche qui, per dover di precisione.
La sintassi di cui sopra, presa alla lettera, funzionerebbe solo con ie. 
Presa alla lettera vuol dire che suppongo che "nomedelform" sia 
l'attributo name del form.
IE non trovando un id corrispondente va a cercare negli attributi name. 
Non importa disquisire del perche', explorer riesce anche in cose peggiori.
Ad ogni modo: il parametro passato *deve*, a questo punto non per regola 
ma per buona creanza, corrispondere al valore di un attributo id.
Dopodiche': si parla di campi testo non di array, sul client, quindi il 
valore e' contenuto nella proprieta' value dell'oggetto (con l'indice 2 
accederesti comunque al *terzo* elemento di un array).
Per concludere, trattandosi di form, preferirei comunque una sintassi 
compatibile con qualunque browser in circolazione che supporti javascript:
document.forms["nomeDelForm"].elements["array[]"].value

[...]
 > Dopodiche': si parla di campi testo non di array, sul client, quindi il
 > valore e' contenuto nella proprieta' value dell'oggetto (con l'indice 2
 > accederesti comunque al *terzo* elemento di un array).
Scusa, rileggo ora con meno fretta che si parlava di php.
Suppongo quindi che si abbiano piu' campi testo con lo stesso nome, 
quindi si parla di "array" anche sul client, nodelist per l'esattezza.
 > Per concludere, trattandosi di form, preferirei comunque una sintassi
 > compatibile con qualunque browser in circolazione che supporti 
javascript:
 > document.forms["nomeDelForm"].elements["array[]"].value
Che quindi diventa:
document.forms["nomeDelForm"].elements["array[]"][indice].value

[...]
 > Dopodiche': si parla di campi testo non di array, sul client, quindi il
 > valore e' contenuto nella proprieta' value dell'oggetto (con l'indice 2
 > accederesti comunque al *terzo* elemento di un array).
Scusa, rileggo ora con meno fretta che si parlava di php.
Suppongo quindi che si abbiano piu' campi testo con lo stesso nome, 
quindi si parla di "array" anche sul client, nodelist per l'esattezza.
 > Per concludere, trattandosi di form, preferirei comunque una sintassi
 > compatibile con qualunque browser in circolazione che supporti 
javascript:
 > document.forms["nomeDelForm"].elements["array[]"].value
Che quindi diventa:


[...]
 >> No...attraverso javascript devo controllare che i campi non siano 
vuoti e
 >> un'altra operazione...ma non so come accedere da javascript a array[]...
 > con xhtml 1.0
Qui xhtml c'entra poco: pensiamo al DOM.
 > document.getElementById("nomedelform").elements["array[]"][2] //per 
accedere al secondo elemento
Anche qui, per dover di precisione.
La sintassi di cui sopra, presa alla lettera, funzionerebbe solo con ie. 
Presa alla lettera vuol dire che suppongo che "nomedelform" sia 
l'attributo name del form.
IE non trovando un id corrispondente va a cercare negli attributi name. 
Non importa disquisire del perche', explorer riesce anche in cose peggiori.
Ad ogni modo: il parametro passato *deve*, a questo punto non per regola 
ma per buona creanza, corrispondere al valore di un attributo id.
Dopodiche': si parla di campi testo non di array, sul client, quindi il 
valore e' contenuto nella proprieta' value dell'oggetto (con l'indice 2 
accederesti comunque al *terzo* elemento di un array).
Per concludere, trattandosi di form, preferirei comunque una sintassi 


 document.forms["nomeDelForm"].elements["array[]"].value
Che quindi diventa:


 document.forms["nomeDelForm"].elements["array[]"][indice].value
Perfetto era quello che cercavo!! grazie!!
Mauro

 tramite javascript?
Puoi dare un id ad ogni elemento e poi usare il getElementById().
In questo caso non ti interessa se č dentro un form con uno altro, ci 
accedi direttamente senza dover passare dal form.
Poi fai un ciclo in js tipo
for (i=0; i < <?=$tot_input?>; i++ ) {
   document.getElementById("id_input" + i)
}
-- 
Andrea Azzini
Arya Interactive Media srl
www.inarya.com

> document.getElementById("nomedelform").elements["array[]"][2] //per 
document.getElementById("iddelform").elements["array[]"][2]
funziona sia con IE che con Moz
-- 
Spoken: How much is that gorilla in the window?
Take our advice, At any price, A gorilla like Magilla is mighty nice.
Gorilla, Magilla Gorilla for sale

 funziona sia con IE che con Moz
Certo, il mio era un discorso di compatibilita' in generale.
Ormai potremmo dire che la quasi totalita' dei browser in circolazione 
supporta document.getElementById, ma per una sciocchezza come recuperare 
il valore di un campo di un modulo non mi sentirei di usare sintassi che 
escludono, solo per citarne uno, netscape 4.
E anche solo parlando di questo: c'e' ancora gente che lo usa, poca, ma 
c'e'.

 Certo, il mio era un discorso di compatibilita' in generale.
Io invece mi riferivo al fatto che in xhtml strict non esiste 
l'attributo 'name' per <form> (da questo partiva la mia citazione di 
xhtml), quindi se utilizzi tale doctype non pui fare riferimento al 
'name'. Quindi, senon sbaglio, puoi solo utilizzare 'getElem...' oppure 
l'array form[].


 l'array form[].
"forms".
Esattamente, il che e' preferibile in ogni caso all'uso del DOM W3C per
questo genere di cose.
-- 
ZER0://coder.gfxer.web-designer/
~ Una mente perversa e' un peccato sprecarla.
(A dirty mind is a terrible thing to waste)

 
Infatti avevo specificato io che la soluzione da me proposta era per xhtml.
Una volta detto questo l'utente aveva gli strumenti per adattare al 
proprio uso, in quanto il 'trucco' è nella parte finale 
(.elements["array[]"][2]), ovvero l'uso dell'array elements.
Tra l'altro, è la soluzione che mi avevi segnalato proprio tu in passato 
  in risposta al medesimo quesito.
Ciao


   in risposta al medesimo quesito.
Sulla parte finale siam d'accordo (elements); mentre sull'uso del
getElementById() ne dubito, almeno che dal contesto non fosse stato chiaro
l'esclusione dei browser piu' vecchi.
-- 
ZER0://coder.gfxer.web-designer/
~ Tutti quelli che credono nella psicocinesi, per favore alzino la mia
mano.

 
Mah, in realtà non mi hai specificato niente del genere. Cmq funzionava, 
e per me andava bene.


 Mah, in realtà non mi hai specificato niente del genere. 
Ho ritrovato il messaggio. Il contesto era proprio riferito in tal senso,
ovvero avevi una form unicamente con l'ID (senza name) e utilizzavi gia' il
getElementById per referenziarla. Questo era il tuo contesto, ed io ti ho
fornito la soluzione in base ad esso.
-- 
ZER0://coder.gfxer.web-designer/
~ "Nei film americani, qualsiasi problema che venga considerato
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno
o piu' ordigni nucleari" (ZER0 & Cosimo)

 
:-) eh eh. Hai dato per scontato che io sapessi dell'esistenza di 
forms[]. Naturalmente scherzo, ma a questo punto toglimi il dubbio:
dici che è preferibile utilizzare forms[] solo per compatibilità o c'è 
un altro motivo a me oscuro?
Grazie&Ciao


 un altro motivo a me oscuro?
Essenzualmente per retrocompatibilita'. Una volta che hai un riferimento a
un oggetto, in qualsiasi modo tu lo recuperi, hai *quel* riferimento su cui
lavorare e cio' basta.
Poi, uno potrebbe anche pensare che accedere alla collection forms sia
"piu' veloce", il buon senso direbbe questo, ma dato che si tratta di
recuperare il riferimento un'unica volta (non siamo in un ciclo) direi che
la differenza, se c'e', non e' apprezzabile. Inoltre penso che dipenda
molto dall'implementazione da parte di chi ha sviluppato il browser (piu'
volte IE e Mozilla su questioni di ottimizzazione js si sono rivelati
differenti).
-- 
ZER0://coder.gfxer.web-designer/
~ "The demo effect, you don't expect"

 Essenzualmente per retrocompatibilita'
[...]
Ok, come al solito preciso e completo.
Grazie mille.
