Newsgroup: it.comp.lang.javascript
Titolo: Check all e uncheck all in un form.

Salve a tutti, come capirete non sono una cima in JS, ho messo questa 
funzione in un form:
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function checkAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = true ;
}
function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = false ;
}
//  End -->
</script>
In pratica ho una serie di checkbox e mi serve che vengano spuntate 
tutte, o venga tolto il segno di spunta a tutte.
Il problema è che ho inserito diverse aree con checkbox nella pagina e 
diversi chech-all uncheck-all, più uno globale a fine pagina.
Ho due problemi principali, se la checkbox è singola, la funzione non 
lavora.. non mette ne toglie il segno di spunta.. se le checkbox sono > 
1 non c'è problema.
Ogni volta che clicco sul pulsante che richiama la funzoine (check o 
uncheck) vengo riportato in testa alla pagina, come se mi spostasse il 
focus, o se ricaricasse la pagina.
Idee ?
Le checkbox sono strutturate così:
<input type="checkbox" name="list6" value="x">Numero 1<br />
<input type="checkbox" name="list6" value="y">Numero 2<br />
<input type="checkbox" name="list6" value="z">Numero 3<br />
mentre il pulsante della funzione è del tipo:
<a href="#" onClick="checkAll(document.form.list6)"><img 
src="gfx/checkall.png" alt="checkall"></a>	
<a href="#" onClick="uncheckAll(document.form.list6)"><img 
src="gfx/uncheckall.png" alt="uncheckall" class="img_link">
Il nome è list+indice, ho così list1, list2, list3, etc.. e i pulsanti 
vanno di conseguenza.
Il check globale di tutte le liste l'ho strutturato, in maniera molto 
barbara, così:
<a href="#" onClick="uncheckAll(document.form.list1); 
uncheckAll(document.form.list2); uncheckAll(document.form.list3); 
uncheckAll(document.form.list4); uncheckAll(document.form.list5); 
uncheckAll(document.form.list6); uncheckAll(document.form.list7); 
uncheckAll(document.form.list8); uncheckAll(document.form.list9); 
uncheckAll(document.form.list10)"><img src="gfx/uncheckall.png" 
alt="uncheckall" class="img_link"></a>
C'è una via più elegante - rapida ?
Grazie mille..
YUS
 

 C'è una via più elegante - rapida ?
vedi mio link di esempio
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 vedi mio link di esempio
Ho provato ma non funziona.. le checkbox fanno parte dello stesso form, 
ho impostato così:
function selAll(f) {
   for(var i=0;i<f.elements.length;i++)
    if(f.elements[i].type=="checkbox")
     f.elements[i].checked=true;
}
<form name="form" action="page.php" method="post">
<a href="#" onClick="selAll(this.form); return false">
<input type="checkbox" name="list3" value="x">
con name variabile da list1 a list9..
hai qualche idea ?

 hai qualche idea ?
Prendi l'abitudine di scrivere le proprietà in minuscolo (onclick, non
onClick).
form è una proprietà che esiste per i tag della form, non esiste per
anchor:
http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/hidden.html#1193209
quindi sarà document.forms['f'], per esempio.
L'errore dovrebbe essere chiaro se guardi la console errori di firefox ...
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
									B.M.

 L'errore dovrebbe essere chiaro se guardi la console errori di firefox ...
Non sono affatto sicuro di aver capito.
Ho modificato <a href="#" onClick="selAll(this.form); return false">
come penso tu mi abbia suggerito:
<a href="#" onClick="document.forms['f']; return false">
ma continua a non spuntare le checkbox..
Le mie conoscenze di JS non mi permettono di individuare l'errore.. :(
Inoltre.. nonostante il return false; mi riporta sempre in testa alla 
pagina.
Grazie per la pazienza..
YUS

 Le mie conoscenze di JS non mi permettono di individuare l'errore.. :(
neanche la console errori di firefox?
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 non la chiamata alla function.
scusami.. errore di digitazione.. non era un copia e incolla.. 
ovviamente intendevo:
<a href="#" onClick="selAll(document.forms['f']); return false">
Ma no mi funziona comunque..
Credo ci sia un errore anche nel parametro 'f' nella dichiarazione della 
funzione.. firebug mi dice che è undefined..
Guidami =)
YUS

 funzione.. firebug mi dice che è undefined..
se 'f' è undefined 2 sono le cose:
a) non hai una form con name="f"
b) hai più di una form con name="f"
ecco un esempio completo funzionante:
<html><head>
<script type="text/javascript">
  function selAll(f) {
    for(var i=0;i<f.elements.length;i++)
     if(f.elements[i].type=="checkbox")
      f.elements[i].checked=true;
  return false;
 }
 </script>
 </head><body>
 <div>
 <form name="f">
 <input type="text" name="testo" value="testuale"/><br/>
 <input type="checkbox" name="list1"/><br/>
 <input type="checkbox" name="list2"/><br/>
 <input type="checkbox" name="list3"/><br/>
 </form></div>
 <div><a href="#" onclick="return selAll(document.forms['f'])">click per
selezionare tutte le checkbox</a></div>
 </body></html>
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 b) hai più di una form con name="f"
Solo con questi due comandamenti mi hai aperto il mondo ;)
Il parametro (f) della dichiarazione della funzione mi aveva talmente 
fuorviato, che non avevo capito che nella chiamata dovessi mettere il 
nome del mio form.. non avevo nessun form con nome f.
P.S. : Un parere su questo mattone:
http://www.libreriauniversitaria.it/javascript-yank-kevin-apogeo/libro/9788850327577
Grazie mille,
YUS

 
http://www.libreriauniversitaria.it/javascript-yank-kevin-apogeo/libro/9788850327577
io sono per imparare online, consiglio libri sono a chi parte totalmente da
zero (ma libri base, giusto per una infarinatura veloce). Sentiamo quindi
gli altri.
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.