• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Engenheira

[Duvida] Seleccionar e des-seleccionar checkboxes

9 mensagens neste tópico

Ola!

Eu precisava de fazer uma coisa mas nao sei se e possivel.

Eu tenho aqui 3 checkboxes e precisava que se seleccionassem e des-seleccionassem dependendo do estado umas das outras. O que eu queria era o seguinte:

  • A segunda checkbox so pode estar seleccionada se a primeira estiver seleccionada
  • A terceira checkbox so pode estar seleccionada se as duas primeiras estiverem seleccionadas
  • Se a primeira checkbox for des-seleccionada as segunda e terceira devem ser des-seleccionadas tambem. Se a segunda checkbox for des-seleccionada, entao a terceira deve ser des-seleccionada tambem.

Eu acho que expliquei mais ou menos o que eu quero.

Eu tinha pensado inicialmente fazer uma funcao que validasse as checkboxes quando se carrega no botao de submit. Se as condicoes nao estivessem satisfeitas entao lancava uma messagebox e des-seleccionava todas as checkboxes. No entanto gostava que isto fosse algo que acontecesse mal o utilizador carregasse na pagina.

E possivel fazer isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes utilizar o evento OnClick das checkboxes, e fazer a tal função de validação de que falaste:

function validar(n) {

cb1=document.getElementById("cb1");
cb2=document.getElementById("cb2");
cb3=document.getElementById("cb3");

switch (n) {
	case 1:
		if (cb1.checked == false)
			cb2.checked = cb3.checked = false;
		break;

	case 2:
		if (cb2.checked == true)
			cb2.checked = cb1.checked;
		else
			cb3.checked = false;
		break;

	case 3:
		if (cb3.checked == true)
			cb3.checked = cb2.checked;
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

penso que é isto que precisas:

<html>
<head>
	<script language="JavaScript">
		function apllyCheckRules(chkN){
			//referência das caixas
			var box1 = window.document.getElementById('chk1');
			var box2 = window.document.getElementById('chk2');
			var box3 = window.document.getElementById('chk3');

			//array de caixas
			var checks = new Array(box1, box2, box3);

			//o valor da caixa alterada, ou seja a caixa que fez executar o evento
			var value = (checks[chkN]).checked;

			if(!value){
				//se foi desmarcada, entao desmarca as caixas seguintes
				for(var i = (chkN <MAIS> 1); i < checks.length; i<MAIS><MAIS>  ){
					(checks[i]).checked = false;
				}
			}else{
				//se foi "checada", verificar se a anterior tb está "checada"
				//se não é a primeira box, claro!
				if((chkN != 0) && (!(checks[chkN-1]).checked)){
					alert('bla bla bla.. não pode seleccionar este check se não seleccionar a anterior! ');
					//e desmarca a box
					(checks[chkN]).checked = false;
				}
			}
		}
	</script>
</head>
<body>
	<input type="checkbox" id="chk1" onclick="JavaScript:apllyCheckRules(0);" /> checkbox 1<br/>
	<input type="checkbox" id="chk2" onclick="JavaScript:apllyCheckRules(1);" /> checkbox 2<br/>
	<input type="checkbox" id="chk3" onclick="JavaScript:apllyCheckRules(2);" /> checkbox 3<br/>
</body>
</html>

esta cena de ter de colocar <MAIS> no código é uma maluqueira! LOL

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigada pela ajuda pessoal!

No meu codigo a terceira checkbox nem sempre aparece, portanto tive de meter la um if.

No segundo codigo (que foi o que eu usei, de qualquer forma obrigada a ambos  :) ) no primeiro for faltavam uns caracteres, os dois sinais de soma, pq isto nao deixa mostrar os sinais de somar, portanto, onde estavam sinais de soma eu coloquei <MAIS> . Bem o meu codigo e praticamente igual, mas vou-o por aqui a mesma:

<script language="JavaScript">
	function applyCheckRules(boxNum){
		//reference of the boxes
		var box1 = window.document.getElementById('instr');
		var box2 = window.document.getElementById('level');
		var box3 = window.document.getElementById('prod');


		//array of boxes
		if(box3!=null){
			var checks = new Array(box1, box2, box3);
		}else{
			var checks = new Array(box1, box2);
		}

		//the value of the box that triggered the event
		var value = (checks[boxNum]).checked;


		if(!value){ //if the box is unchecked, value=False

			//if it was unchecked it unchecks the next boxes
			for(var i = (boxNum <MAIS> 1); i < checks.length; i<MAIS><MAIS>){
				(checks[i]).checked = false;
			}
		}else{
			//if it was checked (and it wasn't the first box), verify if the ones before were checked too
			if((boxNum != 0) && (!(checks[boxNum-1]).checked)){
					alert('There is an error in your checkboxes. Please read the help text on this page for more information.');
				//uncheck the boxes
				(checks[boxNum]).checked = false;
			}
		}
	}
</script>

De novo obrigada! Sem ajuda nao conseguia chegar la, ja tinha feito uma funcao monga mas estas duas estavam muito melhores... Sou uma JavaScript noob! lol  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL!! Realmente os sinais de "MAIS" desapareceram!! Nem tinha dado por isso! LOL!! Deve ser um bug do fórum! ;)

Atenção a quem desenvolve ou mantém este fórum.. Isto de desaparecerem caracteres no código submetido é grave!! Quer se dizer.. a malta mete aqui código para ajudar o povo.. e vai se a ver.. o povo queixa-se que o código não funciona porque desapareceram coisas?!?! LOL!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda me vão explicar como fazer desaparecer exemp. se o ficheiro encontra-se no zip

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

oi?? LOL

anda aqui alguém com os copos... e não sou eu!! LOL

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda me vão explicar como fazer desaparecer exemp. se o ficheiro encontra-se no zip

Hum?!... nao percebi... :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora