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?


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.