Newsgroup: it.comp.lang.javascript
Titolo: problemi document.getElementsByName

Salve a tutti,
Mentre su FF il metodo document.getElementsByName("hdrTAG01") mi
ritorna un array (correttamente) di oggetti IE non torna un array vuoto
(con 0 elementi).
nb. uso la getElementsByName perchè la stessa cosa può apparire più
volte nella stessa pagina e non posso quindi utilizzare le
getelementbyid.
è una cosa regolare o sbaglio l'approccio?

 è una cosa regolare o sbaglio l'approccio?
Probabilmente sbagli qualcosa.
-- 
~ "Non esiste la certezza: è solo l'illusione di una realtà soggettiva."
(Fabio Mornati)

Allora:
Ho n tablelle che mi rappresentano le disponibilità di mangazzino di
determinati articoli di abbigliamento, n tabelle perchè sono
raggruppati per tipo taglia (s m l xl oppure 40 41 42 ecc)
Al click su una riga devo cambiare le intestazioni della tabella
contenente il modelli, chiaramente la tabella viene creata server side
quindi devo dare id diversi ai label contenuti nei vari th ma per
comodità metto tutti con lo stesso name = "hdrTAG01" per la prima e
"hdrTAG02" per la seconda .. quindi al click cosa faccio:
itm ="hdrTAG0"+ (i+1);
txts = document.getElementsByName(itm);
e in un for vario le intestazioni,non è un metodo troppo elegante, ma
semplifica le cose... almeno su FF il quale mette in txts la lista
degli header (che poi è un array di un elemento).
in explorer invece ritorna un array di 0 elementi quindi vuoto e non ho
modo di lavorare sulle taglie.
ZER0 ha scritto:


 modo di lavorare sulle taglie.
Evidentemente c'è qualcosa che non va nel codice di markup sul quale lavori.
Se fai un semplice test in una paginetta html creata per l'occasione, sono
sicuro che il metodo ti funzionerà ugualmente anche su IE.
-- 
~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)

 sicuro che il metodo ti funzionerà ugualmente anche su IE.
Sicuramente.

Guarda, ho estratto un pezzo di html che con explorer non va e con FF
va.
<html>
<head>
	<script>
	function gettt(){
		var i=0,j;
		for (i=0;i<10;i++){
			var itm ="hdrTAG0"+ (i+1);
			var txts = document.getElementsByName(itm)
			for (j=0;j<txts.length;j++){
				if (txts[j]!=null){
					txts[j].innerHTML="A";
				}
			}
		}
	}
	</script>
</head>
<body>
	<table cellspacing="0" cellpadding="1" border="1" style="width: 99%;"
class="Grid">
	<caption>
		<div id="A.M. "><div class="GroupHeader">A.M.</div></div>
	</caption>
	<thead>
	<tr>
		<th name="hdrTAG01" id="A.M. hdrPRG_TAG01">T 1</th>
		<th name="hdrTAG02" id="A.M. hdrPRG_TAG02">T 2</th>
		<th name="hdrTAG03" id="A.M. hdrPRG_TAG03">T 3</th>
		<th name="hdrTAG04" id="A.M. hdrPRG_TAG04">T 4</th>
		<th name="hdrTAG05" id="A.M. hdrPRG_TAG05">T 5</th>
		<th name="hdrTAG06" id="A.M. hdrPRG_TAG06">T 6</th>
		<th name="hdrTAG07" id="A.M. hdrPRG_TAG07">T 7</th>
		<th name="hdrTAG08" id="A.M. hdrPRG_TAG08">T 8</th>
		<th name="hdrTAG09" id="A.M. hdrPRG_TAG09">T 9</th>
		<th name="lblTotale" id="A.M. hdrPRG_Totale">Tot.</th>
	</tr>
	</thead>
	<tbody>
		<td><input type="textbox" index="1" maxvalue="1" name="editText"
value="0" style="width: 15px;"></td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td><input type="textbox" index="5" maxvalue="4" name="editText"
value="0" style="width: 15px;"></td>
		<td><input type="textbox" index="6" maxvalue="2" name="editText"
value="0" style="width: 15px;"></td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
	</tbody>
	</table>
	<a href="javascript:gettt();">Test</a>
</body>
</html>

 essere n
Non ha molto senso comunque. Ti conviene innanzitutto cambiare la struttura
di markup, ripulirla, ed eliminare gli errori di cui ti ho parlato
all'inizio.
Poi, se vuoi accedere agli header di una tabella, dato un indice (come mi
sembra tu stia già facendo), ti conviene fare una cosa di questo tipo:
var th = myTable.tHead.rows[0].cells[i];
Ovviamente myTable deve puntare alla tabella in questione.
-- 
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

 
si probabilmente farò così.

 si probabilmente farň cosě.
E' la soluzione migliore, e ti evita di sporcare il codice di markup.
-- 
~ "Non hai veramente capito qualcosa fino a quando non sei in grado
di spiegarlo a  tua nonna." (Einstein)

Fatto con myTable.tHead.rows[0].cells[i];
e a logica è pure più veloce.
Grazie