Das Ändern von .prop mit jQuery löst kein .change-Ereignis aus

125

Ich habe einen Ereignis-Listener auf einem Kontrollkästchen:

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

Mein Event-Listener:

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

Ich habe einen anderen Ereignis-Listener, .propder das Kontrollkästchen ändert :

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

Wenn ich das Kontrollkästchen aktiviere, wird DO SOMETHINGausgelöst. Wenn ich auf klicke #button, werden die .propÄnderungen und das Kontrollkästchen visuell deaktiviert, aber DO SOMETHINGnicht ausgelöst ...

Etwas, das ich übersehen habe?

Fuzzybabybunny
quelle
Ein mögliches Duplikat des mit prop ()
aktivierten

Antworten:

196

Das Änderungsereignis wird ausgelöst, wenn der Wert durch die Benutzerinteraktion auf der Seite geändert wird und nicht, wenn der Wert mithilfe von Code geändert wird.

Hier müssen Sie verwenden .change()oder .trigger("change")nach dem Ändern der Eigenschaft:

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

Arbeitsdemo

Milind Anantwar
quelle
2
Ich dachte, ich propkümmere mich um die Generierung von Änderungsereignissen?
Gone Coding
1
Cool. Vielen Dank. Gute Demo, die das Konzept beweist. +1 Danke.
Gone Coding
Vielen Dank! Der Grund, warum .prop (). Change () auf meiner Seite nicht funktioniert hat, ist, dass ich jQuery in MeteorJS mache, das eine etwas andere Art hat, jQuery aufzurufen. Ich habe es genau so versucht und es hat funktioniert.
Fuzzybabybunny
@fuzzybabybunny: es liegt nicht an MeteorJS. prop () löst kein Änderungsereignis aus.
Milind Anantwar
@MilindAnantwar, ich habe .prop gefolgt von .change in Meteor code ( Template.myTemplate.events) gemacht und es hat nicht funktioniert. Ich habe dann den gleichen exakten jQuery-Code unter Template.myTemplate.renderedund es lief gut.
Fuzzybabybunny