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?

fuzzybabybunny
fonte
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

Milind Anantwar
fonte
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