Selecting/deselecting checkboxes

J

Jez

Hi,

I have created the following functions to select and deselect
checkboxes in a form ...

function check(checkbox) {
for (i = 0; i < checkbox.length; i++) {
checkbox.checked = true;
}
return "Select all";
}

function uncheck(checkbox) {
for (i = 0; i < checkbox.length; i++) {
checkbox.checked = false;
}
return "Select none";
}

The form itself looks like this ...

<form name="form" action="delete.php" method="post">
<input type="checkbox" name="id" value="1" />Option 1<br />
<input type="checkbox" name="id" value="2" />Option 2<br />
<input type="checkbox" name="id" value="3" />Option 3<br />
<input type="button" value="Select all"
onClick="this.value=check(this.form.id)" />
<input type="button" value="Select none"
onClick="this.value=uncheck(this.form.id)" />
<input type="submit" name="submit" value="Delete selected" />
</form>

This all seems to work very well (although constructive critisism
would be welcome), however I actually need to name the input 'id[]'
because I'm generating an array of values. Unfortunately the funtions
don't seem to like '[]'. Is there anything I can do?

Thank you in advance for your help. It's greatly appreciated!

Jez
 
R

Richard Hockey

Feeding an array of checkboxes into a php script?

<input type="checkbox" name="id[]" id="id" value="1">
<input type="checkbox" name="id[]" id="id" value="2">
<input type="checkbox" name="id[]" id="id" value="3">

or try:

<input type="button" value="Select all"
onClick="this.value=check(this.form.elements['id[]'])" />
<input type="button" value="Select none"
onClick="this.value=uncheck(this.form.elements['id[]'])" />
 
J

Jez Hailwood

Thanks, that's excellent!

My function now works perfectly unless there's only one checkbox, in
which case it doesn't work at all.

Any ideas?

Jez
 
R

Richard Hockey

A single checkbox doesn't have a length property, so you can't loop through
using id.length, you have to specifically check the id

An example I pulled from a page which dynamically generates a group of
checkboxes:

// check for single checkbox by seeing if an array has been created
var cblength=document.forms['inbox'].elements['del'].length;
if(typeof cblength=="undefined")
{
if(document.forms['inbox'].elements['del'].checked==true) count++;
}
else
{
for(i=0;i<document.forms['inbox'].elements['del'].length;i++)
{
if(document.forms['inbox'].elements['del'].checked) count++;
}
}


Assuming you are using php

<input type="checkbox" name="bob" value="3">

and in the php

<?php
if(isset(_POST["bob"])
{
// checkbox 'bob' has been checked in the form
$bob=$_POST["bob"];
// variable $bob will be set to the value of checkbox 'bob', in this case
"3"
}
else
{
// checkbox 'bob' has not been checked, set a default value
$bob="0";
}
 
J

Jez

Problem now solved with a much simpler solution ...

function selectAll(state) {
for (i = 0; i < document.form.elements.length; i++) {
var checkbox = document.form.elements;
checkbox.checked = state;
}
}

<input type="button" value="Select all" onClick="selectAll(true);" />
<input type="button" value="Clear all" onClick="selectAll(false);" />

Jez
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,189
Latest member
CryptoTaxSoftware

Latest Threads

Top