Cambiar .prop usando jQuery no activa el evento .change

125

Tengo un detector de eventos en una casilla de verificación:

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

Mi oyente de eventos:

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

Tengo otro detector de eventos que cambia .propde la casilla de verificación:

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

Cuando marco la casilla de verificación se DO SOMETHINGdispara. Cuando hago clic en #button, los .propcambios y veo la casilla de verificación desmarcada visualmente, pero DO SOMETHINGno se activa ...

¿Algo que estoy pasando por alto?

fuzzybabybunny
fuente
posible duplicado de la casilla
activa

Respuestas:

196

El evento de cambio se activa cuando el valor es cambiado por la interacción de los usuarios en la página y no cuando el valor se modifica utilizando el código.

Aquí debe usar .change()o .trigger("change")después de cambiar la propiedad:

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

Demo de trabajo

Milind Anantwar
fuente
2
Pensé que propse encargó de la generación de eventos de cambio?
Gone Coding
1
Frio. Gracias. Buena demostración que demuestra el concepto. +1 gracias.
Gone Coding
¡Gracias! Entonces, la razón por la cual .prop (). Change () no funcionó por mi parte es porque estoy haciendo jQuery en MeteorJS, que tiene una forma ligeramente diferente de llamar a jQuery. Lo intenté exactamente a tu manera y funcionó.
fuzzybabybunny
@fuzzybabybunny: no es por MeteorJS. prop () no activa el evento de cambio.
Milind Anantwar
@MilindAnantwar, estaba haciendo .prop seguido de .change en el código Meteor ( Template.myTemplate.events) y no funcionó. Luego puse el mismo código exacto de jQuery Template.myTemplate.renderedy funcionó bien.
fuzzybabybunny