Zmiana .prop za pomocą jQuery nie wyzwala zdarzenia .change

125

Mam odbiornik zdarzeń na polu wyboru:

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

Mój odbiornik wydarzeń:

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

Mam innego odbiornika zdarzeń, który zmienia .proppole wyboru:

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

Kiedy zaznaczam DO SOMETHINGwyzwalacze pola wyboru . Kiedy klikam na #button, .propzmiany i widzę pole wyboru, które wizualnie odznacza, ale DO SOMETHINGnie jest uruchamiane ...

Coś, co przeoczę?

fuzzybabybunny
źródło

Odpowiedzi:

196

Zdarzenie Change jest uruchamiane, gdy wartość zostanie zmieniona w wyniku interakcji użytkownika na stronie, a nie, gdy wartość zostanie zmodyfikowana za pomocą kodu.

Tutaj musisz użyć .change()lub .trigger("change")po zmianie właściwości:

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

Działające demo

Milind Anantwar
źródło
2
Myślałem, że propzadbałem o zmianę generowania zdarzeń?
Gone Coding,
1
Chłodny. Dzięki. Dobre demo potwierdzające koncepcję. +1 dzięki.
Gone Coding,
Dzięki! Więc powodem, dla którego .prop (). Change () nie działał po mojej stronie, jest to, że robię jQuery w MeteorJS, który ma nieco inny sposób wywoływania jQuery. Spróbowałem tego dokładnie po swojemu i zadziałało.
fuzzybabybunny
@fuzzybabybunny: to nie z powodu MeteorJS. prop () nie wywołuje zdarzenia zmiany.
Milind Anantwar
@MilindAnantwar, robiłem .prop, a następnie .change w kodzie Meteora ( Template.myTemplate.events) i to nie działało. Następnie umieściłem ten sam dokładny kod jQuery pod spodem Template.myTemplate.renderedi wszystko działało dobrze.
fuzzybabybunny