Newsgroup: it.comp.lang.javascript
Titolo: Selezionare/Deselezionare checkbox in modo random

dato questo form:
<form name="nomeform">
<input type=checkbox name="vao1" value="si">
<input type=checkbox name="vao2" value="si">
<input type=checkbox name="vao3" value="si">
<input type=checkbox name="vao4" value="si">
</form>
come posso fare in modo da averle selezionate o deselezionate in modo
random ad ogni caricamento della pagina?
ho cercato in giro, però ho trovato solo come selezionarle tutte o
nessuna e non in modo random!
Grazie in anticipo!

 random ad ogni caricamento della pagina?
al caricamento della pagina? e perché non lo fai server-side?
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

                                                                             B.M.
perchè sto sperimentando la pagina form in remoto e per il momento non
ho a disposizione uno spazio web, ma la verità è che vorrei capire se
è fattibile con uno script direttamente nella pagina... mi sono
avvicinato a questo linguaggio da una settimana circa e lo trovo
affascinante!

 affascinante!
vero, ma attento a non usarlo quando non serve ...
se puoi fare qualcosa server-side IMHO è meglio farlo lì (e ti togli anche
eventuali problematiche per i client che eventualmente abbiamo javascript
disabilitato)
comunque sia:
 a) recuperi il totale delle checkbox, del tipo (detta f la form):
     var totaleChk=0;
     for(var i=0;i<f.elements.length;i++)
      if(f.elements[i].type=="checkbox")
       totaleChk++;
 b) estrai un numero random compreso nell'intervallo:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Math:random
 c) una volta ottenuto il numero random (chiamiamolo rnd) ricicli le
checkbox, quando arrivi all'elemento rnd la selezioni (checked=true), le
altre checked=false
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

                                                                           S.S.S.
Scusami se abuso di te, ma vorrei cercare di capire (sto qua x questo!
eheh!): io avevo pensato di creare un array e mettere nella pagina del
codice tipo:
<script language="JavaScript" SRC="checked.js" type="text/JavaScript">
</script>
<script language="JavaScript" type="text/JavaScript">
var ck = Math.floor(Math.random() *checked.length);
var cek = ""+ck+""
self.document.nomeform.vao2.checked=checked[cek];
</script>
ma poi ho il problema di cosa scrivo nell'array.....
ho provato:
var checked = new Array()
checked[0] = 'true'
checked[1] = 'false'
ma nn funge!

 codice tipo:
perché un array? gli elementi di una form sono già un array (e quindi puoi
ciclarlo e contarli), a cosa ti serve quindi un array?
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.


wrote:

mmmmm giusto! ma mi perdo nello script....
come riciclo le checkbox?
l'inizio dovrebbe essere così?
<script language="JavaScript" type="text/JavaScript">
var totaleChk=0;
for(var i=0;i<nomeform.elements.length;i++)
      if(f.elements[i].type=="checkbox")
       totaleChk++;
function getRandomArbitary(min, max) {
  return Math.random() * (max - min) + min;
}
var rnd = getRandomArbitary(min, max)
......

 var rnd = getRandomArbitary(min, max)
ok (dove min è zero e max è totaleChk)
poi ripeti quanto sopra selezionando o deselezionando a seconda di rnd, del
tipo:
 var totaleContati=0;
 for(var i=0;i<nomeform.elements.length;i++)
       if(f.elements[i].type=="checkbox") {
        totaleContati++;
        f.elements[i].checked=(totaleContati==rnd);
       }
Conviene mettere tutto in una function e richiamarla onload dell'oggetto
window, altrimenti devi eseguire tutto (ovviamente) dopo aver definito le
checkbox.
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.


wrote:

allora ricapitoliamo, se il form è questo:
<form name="nomeform">
<input type=checkbox name="vao1" value="si">
<input type=checkbox name="vao2" value="si">
<input type=checkbox name="vao3" value="si">
<input type=checkbox name="vao4" value="si">
</form>
avrò: var totaleChk=4; ok?
ma var totaleContati=0 la devo definire in qualke modo?
...e nn capisco come impostare l'unchecked
<form name="nomeform">
<input type=checkbox name="vao1" value="si">
<input type=checkbox name="vao2" value="si">
<input type=checkbox name="vao3" value="si">
<input type=checkbox name="vao4" value="si">
</form>
<script language="JavaScript" type="text/JavaScript">
var totaleChk=4;
for(var i=0;i<nomeform.elements.length;i++)
      if(nomeform.elements[i].type=="checkbox")
       totaleChk++;
function getRandomArbitary(min, max) {
  return Math.random() * (4 - 0) + 0;
}
var rnd = getRandomArbitary(0, 4)
 var totaleContati=0;
 for(var i=0;i<nomeform.elements.length;i++)
       if(nomeform.elements[i].type=="checkbox") {
        totaleContati++;
        nomeform.elements[i].checked=(totaleContati==rnd);
       }
</script>

 ...e nn capisco come impostare l'unchecked
come ti ho scritto...
 var totaleContati=0; //all'inizio è uguale a zero, ci serve per sapere
quale checkbox selezionare
 for(var i=0;i<nomeform.elements.length;i++) //ciclo tra gli elementi della
form
       if(f.elements[i].type=="checkbox") { //se è una checkbox...
        totaleContati++; //la sommo tra le checkbox contate
        f.elements[i].checked=(totaleContati==rnd); //se il totale contate
è uguale al numero random: checked, altrimenti sarà unchecked


        }
bene! funziona... ho fatto così (correggimi eventuali errori!):
<form name="nomeform">
<input type=checkbox name="vao1" value="si">
<input type=checkbox name="vao2" value="si">
<input type=checkbox name="vao3" value="si">
<input type=checkbox name="vao4" value="si">
</form>
<script language="JavaScript" type="text/JavaScript">
var totaleChk=0;
for(var i=0;i<nomeform.elements.length;i++)
      if(nomeform.elements[i].type=="checkbox")
       totaleChk++;
var rnd = Math.floor(Math.random()*5);
 var totaleContati=0;
 for(var i=0;i<nomeform.elements.length;i++)
       if(nomeform.elements[i].type=="checkbox") {
        totaleContati++;
        nomeform.elements[i].checked=(totaleContati==rnd);
       }
</script>
va bene, ma ogni tanto nn ne seleziona neanke una (cosa ke vorrei
eliminare!) e se volessi selezionarne + di una alla volta?

 e se volessi selezionarne + di una alla volta?
ripeti N volte per ogni valore random.
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 ripeti N volte per ogni valore random.
in quale parte dello script? lo so, sto esagerando! ;D
ti ringrazio cmq, senza il tuo aiuto nn ci sarei arrivato di sicuro!

 in quale parte dello script? lo so, sto esagerando! ;D
non so, per esempio potresti creare un array dei numeri random, del tipo
 var arrRnd=new Array(5); //5 numeri random
dove assegni rnd adesso assegni i valori dell'array:
 anziché
  var rnd = Math.floor(Math.random()*5);
 farai un qualcosa del tipo
 for(int i=0;i<arrRnd.length;i++)
  arrRnd[i]=Math.floor........
(resta da valutare l'ipotesi che 2 valori random siano uguali, potresti
variare usando la Contain sotto indicata, e se lo contiene: i--)
Poi quando checki/dechecki (!) dovrai verificare se il valore si trova
nell'Array; se usi questo propotype che ho creato (solo il prototype
Contain):
 
http://www.criosoftware.it/default50.aspx
puoi vedere se il valore è compreso nell'array ... da qua semplicemente ...
prova da solo! 
