我有类似的东西
<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,他们接受了他的回答。
答案 0 :(得分:1)
您可以使用jQuery
checkBox change
事件。
$("#chk1").change(function(){
alert($(this).is(":checked"));
});
答案 1 :(得分:1)
[编辑] (混乱的收音机与复选框)
在脚本中设置.prop()
(或任何其他属性/属性)不会触发该元素上的任何事件。
您可以使用.trigger()
手动触发事件处理程序。
请注意,它不会调用事件本身,而是附加到此事件的处理程序,并且不依赖于实际的:checked
状态。因此,您必须有条件地触发处理程序(检查实际:checked
状态是否与所需状态不同)
当相应的事件发生时,会触发附加
.on()
或其快捷方法之一的任何事件处理程序。但是,可以使用.trigger()
方法手动触发它们。对.trigger()
的调用会按照用户自然触发事件的顺序执行处理程序。
使用您的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/
$('#chk1').prop('checked',newVal)
的更改不会触发onChange事件。
$('#chk1').prop('checked',false).trigger('change');
这是我的另一个问题:作为您使用.trigger('change')
的上下文,您可以将onChange事件发送两次(!)。