Marcar ou desmarcar todos os checkboxes de um formulário com Javascript

Realizamos uma função de Javascript para que se possa selecionar todos os checkboxes ou caixas de seleção de um formulário de uma só vez, clicando somente um link. Fazemos também a função para desmarcar todos os elementos de uma só vez.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 04/1/06

Valorize este artigo:
O exercício que vamos relatar neste artigo é bastante típico de trabalho com formulários em Javascript. Trata-se de fazer um link para que se possa marcar todos os campos checkbox que houver em um formulário de uma só vez, ou seja, sem ter que clica-los um por um para marcar todos. Também faremos a função que permite desmarcar todos os campos checkbox do formulário de uma só vez.

O exercício é simples de entender, mas podemos vê-lo em uma página a parte para termos uma idéia exata de nossas intenções.

O formulário HTML

Temos um formulário criado com HTML que é onde estarão os checkboxes que serão marcados e desmarcados automaticamente. O formulário é muito simples. Vemos a seguir:

<form name="f1">
Nome: <input type="text" name="nome">
<br>
<input type="checkbox" name="ch1"> Opcao 1
<br>
<input type="checkbox" name="ch2"> Opcao 2
<br>
<input type="checkbox" name="ch3"> Opcao 3
<br>
<input type="checkbox" name="ch4"> Opcao 4
<br>
//Outro campo de formulario:
<select name=outro>
<option value="1">Selecao 1
<option value="2">Selecao 2
</select>
<br>
<input type="submit">
<br>
<br>
<a href="javascript:selecionar_todo()">Marcar todos</a> |
<a href="javascript:deselecionar_todo()">Marcar nenhum</a>
</form>


O único que devemos observar é que colocamos diversos tipos de elementos no formulário. Na verdade só vamos trabalhar com o estado dos checkbox, mas não incluímos outros elementos porque o habitual em um formulário é que tenham elementos de vários tipos.

No final do formulário temos dois links para marcar ou desmarcar todos os checkboxes de uma só vez. Estes links chamam a duas funções Javascript que veremos agora.

Funções de Javascript

function selecionar_tudo(){
   for (i=0;i<document.f1.elements.length;i++)
      if(document.f1.elements[i].type == "checkbox")
         document.f1.elements[i].checked=1
}

A função selecionar_tudo() realiza um percorrido por todos os elementos do formulário. Para fazer um percorrido por todos os campos utiliza-se o array "elements", que salva uma referência com cada elemento que houver dentro do formulário.

No percorrido comprova se o elemento atual é de tipo "checkbox" (lembrar que o array elements contem todos os elementos, mas somente desejamos operar com os que sejam checkbox) e nesse caso, simplesmente atualiza-se o atributo "checked" ao valor 1, com o qual o chekbox se marcará.

function deselecionar_tudo(){
   for (i=0;i<document.f1.elements.length;i++)
      if(document.f1.elements[i].type == "checkbox")
         document.f1.elements[i].checked=0
}


A função deselecionar_tudo() é quase igual que a anterior. Realiza um percorrido a todos os elementos e no caso que sejam checkbox, se fixa a zero o atributo "checked" para que a caixa de seleção fique desmarcada.

O exemplo não tem mais mistério. Pode-se ver em funcionamento em uma página a parte.





Comentários do artigo
Foram enviados 10 comentários ao artigo
3 comentários não revisados
7 comentários revisados:
Por: Professor Cirino
12/9/06
Obrigado pelo artigo. Estava precisando desse macete.
Por: Junio Fernandes
20/4/07
Realmente funciona, no entanto, se a lista crescer um pouco consumirá recursos da máquina, podendo provocar o travamento do browser. Pode ser necessário um pouco de Web 2.0 para resolver esse problema.
Por:
04/4/08
Obrigado, ajudou bastante!
Por: Cezar Martins
24/4/08
Olá. Aprendendo com o seu site, consegui fazer de jeito diferente. Um checkbox marca ou desmarca todos. Atentar que, por causa do primeiro checkbox ser o geral, a contagem de "i" só começa com 1.
function selecionar_tudo(){
for (i=1;i<document.lista.elements.length;i++)
if(document.lista.elements[i].type == "checkbox")
if(document.lista.checktodos.checked == 1)
document.lista.elements[i].checked=1
else
document.lista.elements[i].checked=0
}

obrigado!
Por: AdrianaTavares
20/6/08
Excelente exemplo do Sr. Cézar Martins e podemos fazer uma alternativa, conforme descrito abaixo:
function selecionar_tudo()
{
for (i=1;i<document.f1.elements.length;i++)
if(document.f1.elements[i].type == "checkbox")
document.f1.elements[i].checked=document.f1.tudo.checked;
}
Muito bom!
Por: matheus_cassiano
17/3/09
Muito bom tutorial. Obrigado!
checkbox
Por: Kaanda
19/3/09
Só tem que prestar a atenção que no formulário HTML ele chama a função javascript com o nome "selecionar_todo()/deselecionar_todo()", mas na FUNÇÃO tá com o nome "selecionar_tudo()/deselecionar_tudo()"!
No resto está tudo funcionando o//

Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Buscar projetos:

Home | Sobre nós | Copyright | Anuncie | Entrar em contato