Há cerca de um mês, a pergunta de Mitt ficou sem resposta. Infelizmente, estou correndo para a mesma situação agora.
http://api.jquery.com/change/#comment-133939395
Aqui está a situação: estou usando o jQuery para capturar as alterações em um botão de opção. Quando o botão de opção é selecionado, habilito uma caixa de edição. Quando o botão de opção é desmarcado, desejo que a caixa de edição seja desativada.
A habilitação funciona. Quando escolho um botão de opção diferente no grupo, o change
evento não é acionado. Alguém sabe como consertar isso?
<input type="radio" id="r1" name="someRadioGroup"/>
<script type="text/javascript">
$("#r1").change(function () {
if ($("#r1").attr("checked")) {
$('#r1edit:input').removeAttr('disabled');
}
else {
$('#r1edit:input').attr('disabled', true);
}
});
</script>
javascript
jquery
html
radio-button
antwarpes
fonte
fonte
id=r1
Respostas:
Parece que a
change()
função é chamada apenas quando você marca um botão de opção, não quando desmarca. A solução que usei é vincular o evento de mudança a cada botão de opção:Ou você pode dar a todos os botões de opção o mesmo nome:
Aqui está um exemplo prático do jsfiddle (atualizado a partir do comentário de Chris Porter).
Pelo comentário de @ Ray, você deve evitar o uso de nomes
.
neles. Esses nomes funcionam no jQuery 1.7.2, mas não em outras versões ( exemplo do jsfiddle. ).fonte
parte jquery
aqui está a demo
fonte
.attr('checked')
para.prop('checked')
.Você pode vincular a todos os botões de opção de uma só vez pelo nome:
Exemplo de trabalho aqui: http://jsfiddle.net/Ey4fa/
fonte
Isso normalmente funciona para mim:
if ($("#r1").is(":checked")) {}
fonte
Meu problema era semelhante e isso funcionou para mim:
fonte
Digamos que esses botões de opção estejam dentro de um
div
que tenha o IDradioButtons
e que os botões de opção tenham o mesmo nome (por exemplocommonName
):fonte
O
change
evento que não está sendo disparado na desmarcação é o comportamento desejado. Você deve executar um seletor em todo o grupo de opções e não apenas no botão de opção. E seu grupo de rádio deve ter o mesmo nome (com valores diferentes)Considere o seguinte código:
Eu tenho o mesmo caso de uso que o seu, ou seja, para mostrar uma caixa de entrada quando um botão de opção específico é selecionado. Se o evento também fosse disparado na desmarcação, eu receberia 2 eventos por vez.
fonte
Mesmo problema aqui, isso funcionou muito bem:
fonte
Com o Ajax, para mim, trabalhou:
Html:
Javascript:
E php:
fonte