使用jQuery更改.prop不会触发.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不会被触发...

我忽略了什么?


Answers:


196

当用户通过页面上的交互更改值时,而不是使用代码修改值时,将触发Change事件。

在这里您需要使用.change().trigger("change")更改属性后:

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

工作演示


2
我以为prop照顾了变更事件的产生?
Gone Coding

1
凉。谢谢。很好的演示证明了这一概念。+1谢谢。
Gone Coding 2014年

谢谢!所以.prop()。change()在我的终端上不起作用的原因是因为我在MeteorJS中使用jQuery,这与调用jQuery的方式略有不同。我完全按照自己的方式尝试过,并且有效。
Fuzzybabybunny 2014年

@fuzzybabybunny:不是因为MeteorJS。prop()不会触发更改事件。
Milind Anantwar 2014年

@MilindAnantwar,我在流星代码(Template.myTemplate.events)中执行.prop,然后执行.change ,但是它不起作用。然后,我将完全相同的jQuery代码放在下面Template.myTemplate.rendered,并且运行良好。
Fuzzybabybunny 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.