Alterar .prop usando jQuery não aciona o evento .change


125

Eu tenho um ouvinte de evento em uma caixa de seleção:

<input type="checkbox" name="something">

Meu ouvinte de evento:

$('input[type="checkbox"][name="something"]').change(function() { 
    //DO SOMETHING 
});

Eu tenho outro ouvinte de eventos que muda .propda caixa de seleção:

$('#button').click(function() { 
    $('input[type="checkbox"][name="something"]').prop("checked", false);
});

Quando eu marcar a caixa de seleção é DO SOMETHINGacionada. Quando clico no #button, as .propalterações e vejo a caixa de seleção desmarcar visualmente, mas DO SOMETHINGnão é acionada ...

Algo que estou ignorando?


possível duplicata da caixa
GSerg

Respostas:


196

O evento Change é acionado quando o valor é alterado pela interação dos usuários na página e não quando o valor é modificado usando o código.

Aqui você precisa usar .change()ou .trigger("change")depois de alterar a propriedade:

$('input[type="checkbox"][name="something"]').prop("checked", false).change();

Demonstração de trabalho


2
Eu pensei que propcuidava da geração de eventos de mudança?
Codificação ido

1
Legal. Obrigado. Boa demonstração do conceito. +1 Obrigado.
Gone Coding

Obrigado! Portanto, a razão pela qual .prop (). Change () não funcionou no meu fim é porque estou fazendo jQuery no MeteorJS, que tem uma maneira ligeiramente diferente de chamar jQuery. Eu tentei do seu jeito exatamente e funcionou.
fuzzybabybunny

@fuzzybabybunny: não é por causa do MeteorJS. prop () não dispara evento de alteração.
Milind Anantwar

@MilindAnantwar, eu estava fazendo .prop seguido de .change no código Meteor ( Template.myTemplate.events) e não funcionou. Em seguida, coloquei o mesmo código jQuery exato Template.myTemplate.renderede ele correu bem.
fuzzybabybunny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.