---
title: "Checkbox[] validering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/136051-checkbox-validering"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Melea"
published: "2005-10-20T09:36:39.000Z"
updated: "2005-10-23T12:41:46.000Z"
replies: 16
views: 503
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/136051-checkbox-validering"
---

# Checkbox[] validering

## #1 — Melea, 2005-10-20T09:36Z

Morsning,

har lite problem att validera ett formulär där jag har \>10 stycken checkbox som ser ut såhär:

```
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
<input type="checkbox" name="group[]" value="1" />
```

Hur ska jag göra en koll som kollar att jag åtm. har fyllt i en(1) av dessa?

Tack på förhand!

Permalänk: https://www.webforum.nu/p/136051

## #2 — Peter S, 2005-10-20T10:05Z

```
var elms = document.forms["formulärnamn"].elements["group[]"],
    ch   = false;

for (var i = 0; i < elms.length; ++i){
  if (elms[i].checked){
    ch = true;
    break;
  }
}

if (!ch){
  alert("...");
  return false;
}
```

Permalänk: https://www.webforum.nu/p/1689762

## #3 — Melea, 2005-10-20T10:27Z

Tack för det snabba svaret! :)

En fråga bara, ska det verkligen vara ett komma(,)-tecken efter elements\["group\[\]"\]?
Samma i for-loopen, ska det inte vara i++ istället för ++i? :)

Well, hur som helst, jag får inte till det. Såhär ser det ut

```
function validateUser() {

	var elms = document.getElementById('user').elements["group[]"],
	ch   = false;

	for (var i = 0; i < elms.length; ++i){
		if (elms[i].checked){
			ch = true;
			break;
		}
	}

	if (document.getElementById('user').username.value=="") {
		alert("Du måste fylla i ett användarnamn.");
		return false;
	} else if (document.getElementById('user').password.value=="") {
		alert("Du måste fylla i ett lösenord.");
		return false;
	} else if (!document.getElementById('user').email.value.isValidEmail()) {
		alert("Du måste fylla i korrekt en E-mail adress.");
		return false;
	} else if (!ch) {
		alert("Du måste fylla i minst en kår.");
		return false;
	} else {
		alert("Du skickas nu vidare...");
		return true;
	}
	
}

...

<form action="" method="post" id="user" onsubmit="return validateUser()">
```

Tack på förhand!

**/r** Uppdaterat lite

Permalänk: https://www.webforum.nu/p/1689773

## #4 — Melea, 2005-10-20T10:44Z

Har nu pillat lite, och fick ihop det. :)
Ovanstående inlägg funkar.

Tack så mycket än en gång!

Permalänk: https://www.webforum.nu/p/1689780

## #5 — @nders, 2005-10-20T10:47Z

> En fråga bara, ska det verkligen vara ett komma(,)-tecken efter elements\["group\[\]"\]?

Peter snubblade nog en liten aning. Semikolon ska det vara, som vanligt.

Permalänk: https://www.webforum.nu/p/1689781

## #6 — Melea, 2005-10-20T11:25Z

En följdfråga. Jag hittade en tråd här på wF för en stund sedan, där det stod hur man disablar alla checkboxar om man fyllt i fler än, typ, 5.
Men nu verkar denna tråd vara puts väck, hittar den ingenstans.
Så, hur gör man? :)

Tack på förhand.

Permalänk: https://www.webforum.nu/p/1689799

## #7 — Peter S, 2005-10-20T11:53Z

> **@nders skrev:**
>
> > En fråga bara, ska det verkligen vara ett komma(,)-tecken efter elements\["group\[\]"\]?
>
> Peter snubblade nog en liten aning. Semikolon ska det vara, som vanligt.

Nej, det skall vara ett kommatecken där. Jag definierar två variabler samtidigt, men delar upp det hela i två rader  :)  Jämför:

```
var elms = document.forms["formulärnamn"].elements["group[]"],
    ch   = false;

<=>

var elms = ..., ch = ...;

<=>

int i = k, j = m;
```

\++i != i++. Den första varianten räknar upp i utan att skapa en temporär variabel, vilket alltså ger en liten prestandaökning  ;) 

> **Melea skrev:**
>
> En följdfråga. Jag hittade en tråd här på wF för en stund sedan, där det stod hur man disablar alla checkboxar om man fyllt i fler än, typ, 5.

Om alla checkboxar disable:as, hur skall de då kunna enable:as igen?

Permalänk: https://www.webforum.nu/p/1689826

## #8 — Melea, 2005-10-20T12:23Z

> **Peter S skrev:**
>
> Nej, det skall vara ett kommatecken där. Jag definierar två variabler samtidigt, men delar upp det hela i två rader  :)  Jämför:
>
> ```
> var elms = document.forms["formulärnamn"].elements["group[]"],
>     ch   = false;
> 
> <=>
> 
> var elms = ..., ch = ...;
> 
> <=>
> 
> int i = k, j = m;
> ```
>
> 
> \++i != i++. Den första varianten räknar upp i utan att skapa en temporär variabel, vilket alltså ger en liten prestandaökning  ;)

Ah, smart! Uppdaterar mitt inlägg så det står rätt. :)

> **Peter S skrev:**
>
> Om alla checkboxar disable:as, hur skall de då kunna enable:as igen?

Uh, jag menar att, om man fyller i 5 checkboxar så ska alla utom de 5 man fyllt i disablas, och om man sedan tar bort en, så man har 4 ifyllda, ska alla "enablas" igen.
Går detta att lösa? Eller är det enklare att få upp en liten alert(".."); som säger åt en att man inte kan kryssa i fler checkboxar?

Tack för hjälpen! :)

Permalänk: https://www.webforum.nu/p/1689842

## #9 — @nders, 2005-10-20T12:33Z

> Nej, det skall vara ett kommatecken där. Jag definierar två variabler samtidigt, men delar upp det hela i två rader

Ah, såklart!

Jag ber om ursäkt för min korkighet ovan. :)

Permalänk: https://www.webforum.nu/p/1689845

## #10 — Peter S, 2005-10-20T12:57Z

```
<input type="checkbox" onclick="f(this)"...

var k = 5, n = 0;

function f(o){
  var elms = o.form.elements[o.name],
      len  = elms.length;

  o.checked ? ++n : --n;

  for (var i = 0; i < len; ++i){
    if (!elms[i].checked){
       elms[i].disabled = (n == k) ? !elms[i].disabled : false;
    }
  }
}
```

Om du vill kan du ju ge funktionen ett litet mer deskriptivt namn  :)

Permalänk: https://www.webforum.nu/p/1689857

## #11 — Melea, 2005-10-20T13:38Z

Ja, vad säger man.. Peter Peter Peter  :f   :bire 

Tack!

Permalänk: https://www.webforum.nu/p/1689886

## #12 — Melea, 2005-10-20T15:34Z

Ah, hittade en lite "bugg". Jag hämtar ju alla värden till checkboxarna från en databas.
Typ såhär:

```php
if($rows_access[GroupID] == $rows_group[ID]) { echo 'checked="checked"'; }
```

Om vi säger att det redan är två stycken som ligger i databasen som är checkade, så ska det ju inte gå att fylla i fler. Men det gör det, jag kan alltså fylla i två checkboxar till.

Hur kommer jag förbi detta? :)

Permalänk: https://www.webforum.nu/p/1689940

## #13 — Peter S, 2005-10-20T16:24Z

```
window.onload = function(){
  var elms = document.forms["formulärnamn"].elements["group[]"],
      len  = elms.length;

  while (len--){
    if (elms[len].checked){
      ++n;
    }
  }
}
```

  :)

Permalänk: https://www.webforum.nu/p/1689954

## #14 — Melea, 2005-10-20T17:07Z

Great, tack! :)

Permalänk: https://www.webforum.nu/p/1689969

## #15 — Melea, 2005-10-21T19:35Z

Har pillat ett bra tag nu, men får inte ihop det.
Kan någon vänlig själ förklara hur jag kan göra en länk som återställer alla värden?
Det ska alltså återställas så att endast de som har "checked="checked" i koden, fortfarande är förbockade. :)

Permalänk: https://www.webforum.nu/p/1690564

## #16 — Peter S, 2005-10-22T14:16Z

```
window.onload = function(){
  var elms = document.forms["formulärnamn"].elements["group[]"],
      len  = elms.length;

  while (len--){
    if (elms[len].checked){
      arr[n++] = elms[len];
    }
  }
}

var k = 5, n = 0, arr = [];

function f(o){
  var elms = o.form.elements[o.name],
      len  = elms.length;

  o.checked ? ++n : --n;

  for (var i = 0; i < len; ++i){
    if (!elms[i].checked){
       elms[i].disabled = (n == k) ? !elms[i].disabled : false;
    }
  }
}

function res(){
  var elms = document.forms["formulärnamn"].elements["group[]"],
      len  = elms.length;

  n = 0;

  for (var i = 0; i < len; ++i){
    elms[i].disabled = false;

    for (var j = 0; j < arr.length; ++j){
      if (elms[i] == arr[j]){
	elms[i].checked = true;
	f(elms[i]);
	break;
      } else {
	elms[i].checked = false;
      }
    }
  }
}

...

<a href="javascript:void(res())">Reset</a>
```

Permalänk: https://www.webforum.nu/p/1690763

## #17 — Melea, 2005-10-23T12:41Z

Som vanliga  (y) för dig Peter!
I ow you one!

Permalänk: https://www.webforum.nu/p/1691007

---

Tråden på webben: https://www.webforum.nu/amne/javascript/136051-checkbox-validering
