如何更改prop检查并触发相同输入的onchange事件?

时间:2015-03-14 13:04:49

标签: jquery checkbox

我有类似的东西 <input id="chk1" type="checkbox" onchange="alert('HELLO!')"/>,在其他地方,其他事件执行$('#ck1').prop('checked',false),但是,它不会触发onchange事件(!),即不执行alert()


注意1:这是一个关于jQuery概念或工具的问题,而不是“如何”......因为,严格按照上面的设置我们可以说“改变你的代码!”,类似于<input id="chk1" type="checkbox" onchange="doAlert()"/>并做一个序列,$('#ck1').prop('checked',false); doAlert();

NOTE2(在@ArturFilipiak之后编辑删除了第一个好答案):$('#ck1').prop('checked',false).trigger('change')的使用产生了副作用,它触发了两次......我将构建一个jsfiddle稍后用更原始的大/更简单的tham复杂的代码...(编辑:两次是我的大代码的副作用!)。
所以:the SOLUTION IS HERE,但主要贡献来自@ArturFilipiak,他们接受了他的回答。

4 个答案:

答案 0 :(得分:1)

您可以使用jQuery checkBox change事件。

$("#chk1").change(function(){
    alert($(this).is(":checked"));
});

Demo

答案 1 :(得分:1)

[编辑] (混乱的收音机与复选框)

在脚本中设置.prop()(或任何其他属性/属性)不会触发该元素上的任何事件。

您可以使用.trigger()手动触发事件处理程序。

请注意,它不会调用事件本身,而是附加到此事件的处理程序,并且不依赖于实际的:checked状态。因此,您必须有条件地触发处理程序(检查实际:checked状态是否与所需状态不同)

  

当相应的事件发生时,会触发附加.on()或其快捷方法之一的任何事件处理程序。但是,可以使用.trigger()方法手动触发它们。对.trigger()的调用会按照用户自然触发事件的顺序执行处理程序。

Reference


使用您的onchange属性:

<input id="chk1" type="checkbox" onchange="alert('HELLO!')"/>

someFunction(){
    // trigger onchange only if the checkbox is actually checked:
    !$('#chk1').is(':checked') || $('#chk1').prop('checked',false).trigger('onchange');
}
someFunction();

或者在jQuery中设置.change()

$('#ck1').change(function(){
    alert('HELLO!');
});

someFunction(){
    // trigger change only if the checkbox is actually checked:
    !$('#chk1').is(':checked') || $('#chk1').prop('checked',false).trigger('change');
}
someFunction();

答案 2 :(得分:1)

你可以使用。当检查你的财产是否是竞争对手。

http://api.jquery.com/jquery.when/

例如

$.when($('#ck1').prop('checked',false)).done(function( x ) {
   // callback
   doAlert();
});

但是如果你使用jquery我会发现..在jquery中你可以做什么,因为它会给你更有效的工具

答案 3 :(得分:0)

对不起,请参阅有关我的问题的评论,以简化并在问题中表达完整的示例。

以下是问题和解决方案(!):http://jsfiddle.net/7z0q9vvu/1/


jQuery问题(bug?)

$('#chk1').prop('checked',newVal)的更改不会触发onChange事件。

...解决方法(或有效的解决方案)

   $('#chk1').prop('checked',false).trigger('change'); 

注意

这是我的另一个问题:作为您使用.trigger('change')的上下文,您可以将onChange事件发送两次(!)。