Newsgroup: it.comp.lang.javascript
Titolo: Re: come accedere a un elemento array

 straFAQ: form.elements["NPOrario1[]"].etc.etc.
grazie

  document.forms['vincoli'].elements['NPOrario1[]'][0]
Scusa se approfitto, ma come posso sapere quale degli elementi 
dell'array ho selezionato?
Mi spiego, io ho due liste di liste di checkbox, una si chiama
NPOrario1[]
NPOrario1[]
NPOrario1[]
NPOrario2[]
NPOrario2[]
NPOrario2[]
NPOrario3[]
NPOrario3[]
NPOrario3[]
...
e l'altra uguale solo che si chiama NVOrario[]...
quello che vorrei fare e' che quando uno seleziona un elemento di NP il 
corrispondente NV viene disabilitato.
Se l'utente clikka sul checkbox NPOrario2[3], io come faccio a leggere 
"il 3" ??
Per adesso faccio un ciclo sugli elementi di NV e vedo se il valore e' 
uguale a quello di NP selezionato e in tal caso cambio lo stato, c'e' un 
modo migliore?
ciao e grazie ancora
Mauro

ciao, ho la seguente form:
<form name="vincoli" method="post" action="vincoli_elab.php">
<INPUT TYPE="CHECKBOX" NAME="NPOrario1[]" 
VALUE="Lun_8:45-10:45">8:45-10:45<br>
<INPUT TYPE="CHECKBOX" NAME="NPOrario1[]" 
VALUE="Lun_10:45-12:45">10:45-12:45<br>
<INPUT TYPE="CHECKBOX" NAME="NPOrario1" 
VALUE="Lun_12:45-14:45">12:45-14:45<br>
<INPUT TYPE="CHECKBOX" NAME="NPOrario1" 
VALUE="Lun_14:45-16:45">14:45-16:45<br>
<INPUT TYPE="CHECKBOX" NAME="NPOrario1" VALUE="Lun_16:45-18:45">16:45-18:45
come faccio ad accedere ad un certo elemento?
document.vincoli.NPOrario1[].value ovviamente non funziona, ho provato 
con document.vincoli.NPOrario1[][1].value ma niente.
A me servirebbe poter disabilitare il checkbox in certe situazioni ma 
non risesco a farlo.
Immagino che cio' sia dovuto al nome che ho dato al checkbox, infatti se 
lo rinomino in NPOrario1, funziona tutto, ma questo mi obbligherebbe a 
cambiare tutto il lavoro fatto in php :-(
qualcuno mi sa aiutare?
grazie
Mauro

 document.vincoli.NPOrario1[].value ovviamente non funziona
straFAQ: form.elements["NPOrario1[]"].etc.etc.
-- 
Firma in ferie contrattuali

 qualcuno mi sa aiutare?
Guarda, io di php non so nulla ma questa è una delle strafaq, penso sia
stato chiesto qualche fantastilione di volte...e la risposta che viene data
è sempre di usare elements:
 document.forms['vincoli'].elements['NPOrario1[]'][0]
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

  document.forms['vincoli'].elements['NPOrario1[]'][0]
grazie

 dell'array ho selezionato?
 Un qualcosa del tipo
 with(document.forms['vincoli']) 
  for(var _x=0,obj=elements['NPOrario1[]'];_x<obj.length;_x++)
    alert(obj[_x].checked);
 
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

     alert(obj[_x].checked);
Ma cos'è successo? Da quando c'è stata la domanda sul "with", tutti ad
usarlo? :) E sinceramente, non capisco neppure bene perché imbastire un
ciclo del genere.
E' altamente preferibile un classico:
var els=document.forms["vincoli"].elements["NPOrario[]"];
for (var i=0;i<els.length;i++)
	/* do something with els[i] */
Se si è in vena di ottimizzazioni, aggiungere una variabile "el" che
mantenga il valore di els[i], soprattutto se le operazioni da eseguire sul
riferimento sono più di una.
-- 
ZER0 
~ Se potete leggere questo, la mia donna e' caduta.
(Letta sul retro di una maglietta di un motociclista)

 usarlo? :) 
Mai vissuto senza, lo uso praticamente sempre (sì, ho letto che la
reference dice che rallenta). 
Magari quando rispondo ai newsgroup rispondo al volo e non lo uso, qua lo
ho usato semplicemente perché altrimenti la riga mi andava a capo nel
newsreader e poi succedono i soliti casini del copiaincolla che non va...
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 modo migliore?
Diciamo "migliore" a livello logico e pratico, visto che ugualmente devi
scorrere un array.
In sostanza tu adesso verifichi che il valore sia il medesimo tra i due
array, ma parlando genericamente, in presenza di valori simili (ripetizioni
in un array) otterresti un risultato che non è quello desiderato.
Se tanto un ciclo lo devi fare, tanto vale che tu lo faccia sul medesimo
array cliccato, e recuperi l'indice di quell'elemento, a prescindere dal
suo "valore". In questo modo ottieni anche una funzione generica.
Per spiegarmi meglio, qualcosa di simile:
function getFormElementIndex(sender){
	if (sender.form && 
sender.name
){
		var els=sender.form.elements[
sender.name
];
		if (typeof els.length=="number"){
			for (var i=0;i<els.length;i++)
				if (els[i]==sender)
					return i;
		}
	}
	return -1;
}
fatta al volo, ma dovrebbe andare.
Poi nel codice di markup, avrai qualcosa tipo:
<form ... >
	<input type="checkbox" 
		name="NPOrario2[]" 
		onclick="alert(getFormElementIndex(this))" />
.
.
</form>
Giusto lo scheletro per farti capire. Ovviamente invece che fare l'alert,
avrai una funzione che recupererà il valore di ritorno di
getFormElementIndex() e lo imposterà come indice per l'altro array.
-- 
ZER0 
~ "Problemi" e' il nome che gli informatici danno a quelli che
comunemente verrebbero definiti "disastri"; altrimenti si chiamano
"features".

 newsreader e poi succedono i soliti casini del copiaincolla che non va...
Ma non mi pare il caso di modificare sostanzialmente un banale ciclo, per
una mera questione di "a capo".. Tant'è, cmq, che scrivendolo nel modo
canonico, il problema non si poneva.
E' vero che istruzioni come il "for" permettono una certa flessibilità
nello scrivere codice, ma si dovrebbe sempre equilibrare la chiarezza e
leggibilità del codice stesso, alla flessibilità di cui sopra.
Soprattutto se si scrive codice per altri; quando uno scrive codice solo
per sè, anche se ugualmente non dovrebbe, potrebbe permettersi di fare
anche tutto su una riga. :)


 suo "valore". In questo modo ottieni anche una funzione generica.
questo SI, e' decisamente meglio di come facevo io
Grazie mille ad entrambi !!!
ciao
Mauro