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");
};

Exemplo online aqui! :D

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;
			}
		};
	}
}

Exemplo online atualizado! :D

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. :D

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;
		}
	};
}

Exemplo online atualizado! [2] :p

Bye, bye!