Faaala, galera!
Hoje vou mostrar um função que fiz aqui para estudos. Ela seleciona uma série de checkboxes com mesmo name.
function selectAll(checkAll, nameChecks, textID, alternativeText){
var check = document.getElementsByName(checkAll)[0];
var checks = document.getElementsByName(nameChecks);
var text = document.getElementById(textID);
var defaultText = text.innerHTML;
check.onclick = function(){
for (var i = 0; i < checks.length; i++) {
if(this.checked){
checks[i].checked = true;
text.innerHTML = alternativeText;
}else{
checks[i].checked = false;
text.innerHTML = defaultText;
}
}
};
}
Fazendo funcionar:
window.onload = function(){
selectAll("everyDays", "days", "all", "Deselecionar todos os dias");
};
Se alguém tiver alguma dúvida de como fazer funcionar, de como funciona ou se tiver uma sugestão para melhorias no script, não deixe de comentar.
Hasta la vista, baby!
[update hour="14:48"]
Como bem observado o Paulo, no Comment #2, há um bug no código. Segue o novo:
function selectAll(checkAll, nameChecks, textID, alternativeText){
var check = document.getElementsByName(checkAll)[0];
var checks = document.getElementsByName(nameChecks);
var text = document.getElementById(textID);
var defaultText = text.innerHTML;
check.onclick = function(){
for (var i = 0; i < checks.length; i++) {
if(this.checked){
checks[i].checked = true;
text.innerHTML = alternativeText;
}else{
checks[i].checked = false;
text.innerHTML = defaultText;
}
}
};
for(var x = 0; x < checks.length; x++){
checks[x].onclick = function(){
if(!this.checked){
check.checked = false;
text.innerHTML = defaultText;
}
};
}
}
Atualizando o código percebi mais um bug – pois é, mais um (juro que na próxima vez eu analiso melhor o código). Na verdade não é um bug, é mais uma questão de lógica. Mas como estou sem tempo agora, só irei postá-lo mais tarde.
Valeu aí, Paulo, e se descobrirem mais bugs, avisem-me. ^^
[update hour="19:32"]
Bem, consegui uma brexa no meu tempo para postar a atualização.
O “bug” – eu não considero um bug… – era o seguinte: se você selecionar de Domingo à Sábado significa que todos estão selecionados, certo? Então! Se estão todos estão selecionados, é interessante colocar o input type=”checkbox”, que seleciona todos, como checked!
Bem, chega de blá blá e eis aqui o código:
window.onload = function(){
selectAll("everyDays", "days", "all", "Deselecionar todos os dias");
};
function selectAll(checkAll, nameChecks, textID, alternativeText){
var check = document.getElementsByName(checkAll)[0];
var checks = document.getElementsByName(nameChecks);
var text = document.getElementById(textID);
var defaultText = text.innerHTML;
var checkeds = 0;
check.onclick = checksAll;
function checksAll(){
for(var i = 0; i < checks.length; i++){
if(this.checked){
checks[i].checked = true;
text.innerHTML = alternativeText;
checkeds = checks.length;
} else{
checks[i].checked = false;
text.innerHTML = defaultText;
checkeds = 0;
}
}
};
for(var x = 0; x < checks.length; x++){ checks[x].onclick = verify }
function verify(){
if(this.checked) ++checkeds;
else --checkeds;
if(checkeds == checks.length){
check.checked = true;
text.innerHTML = alternativeText;
} else{
check.checked = false;
text.innerHTML = defaultText;
}
};
}
Bye, bye!








Bem fácil e útil
Parabéns Thiago pelo ótimo tutorial. Estou aguardando o próximo ^^
Ficou bem legal,
Quando eu cliquei em marcar todos, ele marcou beleza, mas quando cliquei para desmarcar segunda ele ainda ficou marcado o “Deselecionar todos os dias”
Seria mais legal que essa opção fosse desmarcada!
Tai um desafio para você!
abraço
@Leonardo
valeu, man.
@Paulo
e aê, cara, quanto tempo, não? :p
Verdade! Nem tinha percebido isso aí. Atualizei o post com essa sua observação. ^^
Tempo mesmo hein.
Um outro post que você pode fazer que é bem simples, é inverter selecionados.
Fica a dica
abraço
PS: Estou todo dia no Forum
Se eu fosse utiliza isso com mysql? como eu passaria os parametros?
Marcio,
tudo bom? Vou ser sincero: não sei nada de Banco de Dados e também nenhuma linguagem server side, logo não posso te responder de cara isso.
Vou dar uma pesquisada aqui para ver se acho uma resposta.
Mas, cara, acho que isso não vai influenciar em nada. Através de alguma linguagem server side, você recupera os value e trabalha com eles.
Yoo Gordaiada
Vi os códigos tendi quase nada mais tamos ai tipo uma coisa que não entendi é que tem 3 exemplos e todos são absolutamente iguais eu não consegui achar a diferença dos três só vi no código mesmo
Ochii,
o exemplos online são iguais por serem o mesmo código. :p
Mas você pode acompanhar a evolução do código JavaScript no post.
Olá Thiago, o código está bem simples, bem enxuto, mas ele não funciona no exercício de um sistema.
Digamos que você tenha uma página de cadastro de funcionário em um sistema de gerenciamento de pessoal em uma empresa qualquer. Você precisa cadastrar os dias em que o funcionário X irá trabalhar.
Como você vai conseguir dizer isso ao sistema se todos os checkboxes possuem o mesmo ‘name’?
Olá, Jonnyes, tudo bom?
Seguinte, cara, eu nunca estudei nenhuma linguagem server side, mas vamos lá:
Veja o HTML. Na opção “Selecionar todos os dias” há o atributo name com o valor everyDays. Right?
Então, com a sua linguagem server side você verifica se este está checked.
Não sei se expliquei muito bem. Qualquer coisa comenta aí. ^^
O erro está no html.
Dom
Seg
deveria ser:
Dom
Seg
pois se não, a linguagem server-side, entende que vc sobrescreveu a variável.. em vez de enviar um array dela.. ai, tem que mudar algumas coisinhas no script JS tb.
name=”day”
deveria ser:
name=”day[]”
^^ acima o content=”WordPress 2.8.6″, cortou a tag HTML.
Aê, Brunão! Beleza, maluco?
Valeu, pela resposta, inclusive a do msn! ^^
Abraços, cara.