Зміна .prop за допомогою jQuery не викликає події .change


125

У мене на слухавці є слухач події:

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

Мій слухач події:

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

У мене є ще один слухач подій, який змінює .propпрапорець:

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

Коли я встановлю прапорець DO SOMETHING. Коли я натискаю на #button, .propзміни, і я бачу прапорець візуально зніміть, але DO SOMETHINGне спрацьовує ...

Щось я не помічаю?


Відповіді:


196

Подія зміни запускається, коли значення змінюється взаємодією користувачів на сторінці, а не коли значення змінюється за допомогою коду.

Тут вам потрібно скористатися .change()або .trigger("change")після зміни властивості:

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

Робоча демонстрація


2
Я думав, propподбав про зміну покоління подій?
Пройшов кодування

1
Класно. Дякую. Хороша демонстрація концепції. +1 Дякую
Пройшов кодування

Дякую! Тож причина, чому .prop (). Change () не працював на моєму кінці, полягає в тому, що я роблю jQuery в MeteorJS, який має дещо інший спосіб виклику jQuery. Я спробував це саме так, і це спрацювало.
fuzzybabybunny

@fuzzybabybunny: це не через MeteorJS. prop () не викликає подію зміни.
Milind Anantwar

@MilindAnantwar, я робив .prop з подальшим .change в коді Meteor ( Template.myTemplate.events), і це не спрацювало. Потім я поклав такий самий точний код jQuery Template.myTemplate.renderedі він нормально працював.
fuzzybabybunny
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.