Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_tanda

Desabilitar linha quando um input:checked

Recommended Posts

Oi gente,

 

To com uma tabela e em cada linha tem 3 input checkbox, quero que a partir do clique em um deles os outros input da mesma linha sejam desabilitados. Sou nova em jquery e o código que desenvolvi verifica se o input foi checado em qualquer linha, não apenas naquela em questão.

 

Exemplo tabela:

____________________________________________________

|alguma pergunta | checkbox | checkbox | checkbox |

 

Código:

 

$('tr').click(function(){

$('tr').each(function(index){
if($('tr',this).find('input:checked')){
$(this).find("input:not(:checked)").attr("disabled", "disabled");
}
});
});
Então quando clico em um input todos os outros são desabilitados, não só os daquela mesma linha.
Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vixi, acho que seria algo mais pra isso:

 

 

 

$("input[type='checkbox']").change(function(){
  var ref = $(this);
  var check = ref.attr('checked');
var tr = $(ref).closest('tr');
if(check == 'checked'){
$(tr).find("input[type='checkbox']").attr('checked', 'false');
$(ref).attr('checked', 'true');
}else{
  $(tr).find("input['type='check']").attr('checked', 'false');
}
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! eai Vinícius,

 

Testei este código e não funcionou...

Não conhecia a função closest() mas entendi a substituição do each()

Os atributos que estão sendo alterados dentro do if são os checked, mas eu quero mudar o disabled

A partir do código que mostrou alterei para este:

 

 

$("input[type=checkbox]").change(function(){
var ref = $(this);
var check = ref.attr('checked');
var tr = $(ref).closest('tr');
if(check == 'checked'){
$(tr).find("input[type=checkbox]:not(:checked)").attr('disabled', 'disabled');
}else{
$(tr).find("input['type=checkbox]").attr('checked', 'false');
}
});

 

Coloquei uns alert nele pra ver até onde ia e ele não entra no if, nem esse nem o que mandou...

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque o seu html para melhor compreender.

 

o closets é quase um parent, no caso eu coloquei pra ele pegar a TR a nível pai do input que foi clicado.

 

com o html é móle resolver isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro era a igualdade dentro do if, já alterei e está funcionando..

 

Obrigada =]

 

Agora percebi que quando tiro a seleção ele deixa a linha inteira bloqueada... vou ver o que faço aqui, se puder ajudar nesse também agradeço mais ainda.. hahah

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele nem chega a entrar no else, coloquei uns alert pra identificar

 

$("input[type='checkbox']").change(function(){
		var ref = $(this);
		var check = ref.attr('checked');
		var tr = $(ref).closest('tr');
				
		if(check = 'checked'){
			$(tr).find("input[type='checkbox']:not(:checked)").attr('disabled', 'true');
			alert("selecionou um item");
			
		} else {
			$(tr).find("input[type='checkbox']").attr('disabled', 'false');
			alert("não tem nenhum");
		}
	});

 

quando clico pra selecionar ou pra tirar a seleção me vem o alerta de "selecionou um item"

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

if(check = 'checked'){

nunca vai entrar por causa dessa linha, você esta atribuindo o valor do check de novo, == é para verificações;

 

deixe assim

 

 

 

if(check == true)

Compartilhar este post


Link para o post
Compartilhar em outros sites

verdade, havia mudado quando deu erro no início

 

alterei, mas agora ele pula direto pro else e bloqueia a linha inteira independente da seleção

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(check == true)

Isso tá errado, o valor do atributo checked devolvido pelo jQuery é "checked" ou vazio (""). Agora não me lembro se "" faz cast pra true ou false, mas não deveria fazer assim.

 

Tente dessa forma:

 

$(document).ready(function(){
    $("input[type='checkbox']").click(function(){
     var ref = $(this);
     var check = ref.is(':checked');
     var tr = $(ref).closest('tr');
      
     if(check == true){
      $(tr).find("input[type='checkbox']:not(:checked)").attr('disabled', 'true');
      alert("selecionou um item");
     
     } else {
      $(tr).find("input[type='checkbox']").attr('disabled', 'false');
      alert("não tem nenhum");
     }
    });
   });

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe Vinicius, achei q o HTML te ajudaria na primeira dúvida que tive senão teria postado

 

tinha trocado o = de atribuir pra == pra conferir e não havia solucionado..

 

Obrigada, Henrique,

 

creio que antes a condição não entrava pro else pq a variavel ref estava com o attr pra atribuir não o is pra checar...

tirei as chaves do true e do false dentro do attr e tudo resolvido...

 

Segue o código que rodou conforme o esperado..

 

$("input[type='checkbox']").change(function(){
				
		     var ref = $(this);
		     var check = ref.is(':checked');
		     var tr = $(ref).closest('tr');
		      
		     if(check == true){
		      $(tr).find("input[type='checkbox']:not(:checked)").attr('disabled', true);
		      alert("selecionou um item");
		     
		     } else {
		      $(tr).find("input[type='checkbox']").attr('disabled', false);
		      alert("não tem nenhum");
		     }
		     
	});

 

Obrigada galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.