webForumDet fria alternativet

Minst 3 ikrysade

4 svar · 543 visningar · startad av Thompa__85

Thompa__85Medlem sedan aug. 2002600 inlägg
#1

Hejsan Wf!

Är lite nybörjare på javascript så får inte riktigt till min kontroll av checkboxs! Målet är att det finns 8 checkboxar med olika namn på sidan, Minst 3 av dessa måste vara ikryssade.

Har börjat fixa på en kod som vägrar fungera, inget händer när jag kör det.

i head:

<script language="javascript">
function formvalidation()
{           
var e=o.document,
	i=e.length,
	ch=false;

	while(i-->0)
	{
		if(e[i].type=="checkbox" && e[i].checked)
		{
			ch=true;
			break;
		}
	}

	if(!ch)
	{
		alert("Minst tre av \"checkboxarna\" måste vara ikryssad");
		return false;
	}
}
</script>

Och i själva formen ser ut så här:

<form action="?do=hobby" name="hobbys" method="post" onSubmit="return formvalidation();">

<table border="0" width="304" id="hobbyss">
	<tr>
		<td width="116"><b>Sport &amp; Fritid</b></td>
		<td width="20"><input type="checkbox" name="C1" value="1"></td>
		<td>&nbsp;</td>
		<td width="96"><b>Film &amp; teater</b></td>
		<td width="20"><input type="checkbox" name="C5" value="1"></td>
	</tr>
	<tr>
		<td width="116"><b>Elektronik</b></td>
		<td width="20"><input type="checkbox" name="C2" value="1"></td>
		<td>&nbsp;</td>
		<td width="96"><b>Datorer &amp; IT</b></td>
		<td width="20"><input type="checkbox" name="C6" value="1"></td>
	</tr>
	<tr>
		<td width="116"><b>Nöjesliv &amp; Mode</b></td>
		<td width="20"><input type="checkbox" name="C3" value="1"></td>
		<td>&nbsp;</td>
		<td width="96"><b>Böcker</b></td>
		<td width="20"><input type="checkbox" name="C7" value="1"></td>
	</tr>
	<tr>
		<td width="116"><b>Musik</b></td>
		<td width="20"><input type="checkbox" name="C4" value="1"></td>
		<td>&nbsp;</td>
		<td width="96"><b>Friluftsliv</b></td>
		<td width="20"><input type="checkbox" name="C8" value="1"></td>
	</tr>
</table>

<p><b>Student?</b> <input type="checkbox" name="student" value="1">
<font size="2"><i>(Lämna tomt om du ej är student)<br>
<br>
</i><font size="3">
<input type="submit" value="Gå vidare" name="submit" style="font-weight: 700"></font></font><br>
</form>

Hur ska jag lösa detta? Tack på förhand!

jawbreakerMedlem sedan jan. 2003296 inlägg
#2
function formvalidation( f )
{
	var e = f.elements,
	len = e.length,
	cnt = 0;

	for ( var i = 0; i < len; i++ )
	{
		if ( e[i].type == "checkbox" && e[i].checked )
		{
			cnt++;
		}
	}

	if ( cnt < 3 )
	{
		alert( "Minst tre av \"checkboxarna\" måste vara ikryssade" );
		return false;
	}

	return true;
}

och

<form action="?do=hobby" name="hobbys" method="post" onSubmit="return formvalidation(this);">

bör fungera..?

UrMeMedlem sedan apr. 2001762 inlägg
#3

Hur skulle koden se om man har t.ex 15 kryssrutor, och man får kryssa i högst 5?
Den borde kolla om fler än 5 är ikryssad varje gång man klickar i en ny checkruta.. går det att göra?

Sorry om jag tog över tråden ;)

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Följande utgår från att regeln gäller samtliga checkboxar i ett formulär:

// Maximalt antal samtidigt ikryssade rutor
var numAllowed = 5;

var numChecked = 0;

window.onload = function(){
  // Byt 'f' mot namnet på ditt formulär
  var elms = document.forms["f"].elements,
      i    = elms.length;

  while (i--){
    if (elms[i].type == "checkbox"){
      elms[i].onclick = function(){
	if (!this.checked){
	  --numChecked;
	} else {
	  if (numChecked == numAllowed){
	    alert("...");
	    this.checked = false;
	  } else {
	    ++numChecked;
	  }
	}
      }
    }
  }
}
UrMeMedlem sedan apr. 2001762 inlägg
#5

Fungerar klockrent! Tackar!

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)