Cari ragazzi,

volevo chiedervi un piccolo aiutino per quanto riguarda i checkbox, vi spiego:

Ho una pagina web con un form, all'interno di questo ci sono tra i vari campi di testo dei checkbox.
Mi servirebbe che, per esempio, se ci sono 4 checkbox e io voglio che le scelte al massimo siano 2, quindi far uscire un messaggio di avvertimento se si prova a cliccare il terzo checkbox.

Spero di essere stato chiaro.
Grazie

.:LTADM:.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
usa una variabile come contatore: ogni volta che una check viene spuntata la incrementi di 1, se invece viene tolta la spunta la decrementi.
Su ogni checkbox, mettici questo:

onClick="Javascript:spunta(this)"

e poi costruisci la funzione "spunta". Metti questo script dove vuoi... nei tag <head> andrà bene:

<script language="Javascript">
max_da_spuntare = 2
spuntate = 0
function spunta(chk){
if (chk.checked){
//l'utente ha spuntato una check
//ora però bisogna vedere se
//supera il limite massimo
if (spuntate+1>max_da_spuntare){
alert("Attenzione! non puoi spuntare più di " + max_da_spuntare + " caselle")
chk.checked = false
} else {
//vai, vai... questa può essere spuntata
spuntate += 1
}
} else {
spuntate -= 1
}
}
</script>

Modificato da BrightSoul il 27 novembre 2003 11.40 -

Enjoy learning and just keep making
Lo script funziona benissimo, ti ringrazio tanto.
L'unica cosa che ho dimenticato di dire è che di checkbox ne ho diversi sulla pagina e ogni gruppo fa capo ad una domanda. Mi spiego:

Argomenti 1:
check1/check2/check3

Argomenti2:
check1/check2/check3

Ora se vado a metterci il controllo, lo script lo fa su tutti i check box a cui ho dato l'onClick, anche se lo metto su form diversi ma nella stessa pagina.
Esiste un modo per ovviare a questo? Oppure per avere modo di dire allo script "ti trovi su questo form e mi fai il controllo" e quindi aggiungendone un altro su un form differente mi controlla l'altro.

Scusa la mia ignoranza.
Grazie ancora
Modificato da dragonero74 il 27 novembre 2003 15.24 -

.:LTADM:.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
devi solo fare un piccolo ritocco allo script precedente.


anche se lo metto su form diversi ma nella stessa pagina.

già, infatti...
se vuoi che alcune checkbox siano escluse dal conteggio, è necessario non mettere l'istruzione onClick su di esse.


Esiste un modo per ovviare a questo? Oppure per avere modo di dire allo script "ti trovi su questo form e mi fai il controllo"

si, ti basta indicare il numero della domanda a cui quella checkbox fa riferimento. Esempio, se prima usavi questo:

onClick="Javascript:spunta(this)"

ora usa:

onClick="Javascript:spunta(this,1)"

quel ,1 dirà alla funzione di fare il conteggio solamente con le checkbox della domanda 1. Ovviamente su ogni check appartenente alla stessa domanda dovrai metterci sempre lo stesso numero.
La funzione cambierà così:

<script language="Javascript"> 
max_da_spuntare = 2 
spuntate = new Array() 
function spunta(chk, domanda){ 
while (spuntate.length <= domanda){
spuntate.push(0)
}
if (chk.checked){ 
//l'utente ha spuntato una check 
//ora però bisogna vedere se 
//supera il limite massimo 
if (spuntate[domanda]+1>max_da_spuntare){ 
alert("Attenzione! non puoi spuntare più di " + max_da_spuntare + " caselle") 
chk.checked = false 
} else { 
//vai, vai... questa può essere spuntata 
spuntate[domanda] += 1 
} 
} else { 
spuntate[domanda] -= 1 
} 
} 
</script>


come vedi, la variabile che tiene il conteggio (spuntate) adesso è diventata un array in modo che può contenere più valori.

l'importante, ripeto, è che raggruppi le checkbox mediante il nuovo valore:
onClick="Javascript:spunta(this,4)"
questo andrà sulle check della domanda 4...

ciao

Enjoy learning and just keep making
Ti ringrazio di nuovo, sei grande.
Dove hai imparato a programmare così bene?

.:LTADM:.
11.886 messaggi dal 09 febbraio 2002
Contributi
naaaa, si tratta solo di avere dimestichezza... come con l'allacciarsi le scarpe, dopo un po' che lo fai ti viene senza pensarci troppo. Vedrai che capiterà anche a te, segui il forum, si imparano molte cose da qui.

Ciao, buon lavoro

Enjoy learning and just keep making
Bè, non posso far altro che ringraziarti dei consigli e del codice, seguirò con molto impegno il forum, stanne certo.

Ciao

.:LTADM:.
Caro BrightSoul,

ho provato il tuo script ed effettivamente funziona in maniera egregia.
Solo che se resetto i form, quindi trovandomi con i checkbox vuoti, appena faccio click su di essi mi esce ugualmente il messaggio di avviso.
Ti allego qui sotto il codice html, spero che tu mi sappia svelare l'arcano.
Grazie ancora.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
max_da_spuntare = 2
spuntate = new Array()
function spunta(chk, domanda){
while (spuntate.length <= domanda){
spuntate.push(0)
}
if (chk.checked){
//l'utente ha spuntato una check
//ora però bisogna vedere se
//supera il limite massimo
if (spuntate[domanda]+1>max_da_spuntare){
alert("Attenzione! non puoi spuntare più di " + max_da_spuntare + " caselle")
chk.checked = false
} else {
//vai, vai... questa può essere spuntata
spuntate[domanda] += 1
}
} else {
spuntate[domanda] -= 1
}
}
</script>
</head>

<body>
<!--<form id="frmMeeting" name="frmMeeting" method="GET" action="">-->

<form id="form1" name="form1" method="GET" action="">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td width="25%"><input name="mt" type="checkbox" id="mt" value="1" onClick="Javascript:spunta(this,1)"></td>
<td width="25%"><input name="mt" type="checkbox" id="mt" value="2" onClick="Javascript:spunta(this,1)"></td>
<td width="25%"><input name="mt" type="checkbox" id="mt" value="3" onClick="Javascript:spunta(this,1)"></td>
<td width="25%"><input name="mt" type="checkbox" id="mt" value="4" onClick="Javascript:spunta(this,1)"></td>
</tr>
<tr align="center">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr align="center">
<td>&nbsp;</td>
<td><input name="do_form" type="submit" id="do_form" value="Invia"></td>
<td><input type="reset" name="Submit2" value="Reset"></td>
<td>&nbsp;</td>
</tr>
</table>
</form>

<form name="form2" method="post" action="">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td width="25%"><input name="Primo2" type="checkbox" id="Primo2" value="Si" onClick="Javascript:spunta(this,2)">
</td>
<td width="25%"><input name="Secondo2" type="checkbox" id="Secondo2" value="Si" onClick="Javascript:spunta(this,2)">
</td>
<td width="25%"><input name="Terzo2" type="checkbox" id="Terzo2" value="Si" onClick="Javascript:spunta(this,2)">
</td>
<td width="25%"><input name="Quarto2" type="checkbox" id="Quarto2" value="Si" onClick="Javascript:spunta(this,2)">
</td>
</tr>
<tr align="center">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr align="center">
<td>&nbsp;</td>
<td><input type="submit" name="Submit3" value="Invia">
</td>
<td><input type="reset" name="Submit22" value="Reset">
</td>
<td>&nbsp;</td>
</tr>
</table>
</form>
<p>&nbsp;</p>
</body>
</html>

Come vedi ho provato nel primo form a mettere ai checkbox i nomi uguali mentre nel secondo a metterli diversi per ognuno, ma il risultato non cambia.

Ciao

.:LTADM:.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.