jQuery选中复选框并触发javascript onclick事件

jQuery选中复选框并触发javascript onclick事件,javascript,jquery,Javascript,Jquery,我试图使用jQuery选中一个复选框,并在此过程中触发onclick事件 假设我在html中定义了一个复选框: <input type="checkbox" value="checked" name="check1" onclick="alert(this.value);"> 结果是复选框被选中,但是javascript onclick事件没有被触发(因此没有警报)。但如果我手动触发点击: $('input[name=check1]').attr('checked', true).

我试图使用jQuery选中一个复选框,并在此过程中触发onclick事件

假设我在html中定义了一个复选框:

<input type="checkbox" value="checked" name="check1" onclick="alert(this.value);">
结果是复选框被选中,但是javascript onclick事件没有被触发(因此没有警报)。但如果我手动触发点击:

$('input[name=check1]').attr('checked', true).trigger('click');
结果是复选框被选中,javascript onclick事件被触发(值被正确地获取),但随后复选框被取消选中

有人能告诉我如何实现我的目标吗?

使用
.triggerHandler()
而不是
.trigger()

另外,使用
.prop()
代替
.attr()

(如果您使用的是jQuery 1.6或更高版本。)编辑-另外,正如我在另一个答案上所评论的,当以编程方式触发事件时,您必须注意jQuery的奇怪行为。当元素上发生真正的“单击”时,该元素的“单击”处理程序将看到“checked”标志的更新值。也就是说,如果单击未选中的复选框,单击处理程序将看到“checked”标志设置为
true
。但是,如果通过jQuery在未选中的复选框上触发“单击”,则“单击”处理程序将看到“选中”标志设置为
false
!在我看来,这确实是件坏事,但它总是这样做

再次编辑-哦,还有,我忘记了另一个重要的(令人恼火的)jQuery奇怪之处:由于未知的原因,
.triggerHandler()
API将只调用第一个匹配元素上的处理程序。如果尝试触发所有复选框“单击”处理程序,换句话说:

$('input:checkbox').triggerHandler('click');
然后只会触发页面上的第一个复选框。为了对付这种疯狂行为,我通常会用我自己的假事件名以及“单击”绑定处理程序:

这样我就可以触发“我的点击”并充分利用这两个世界:库触发所有匹配元素的处理程序,但它不会切换元素的实际状态。

更改:

$('input[name=check1]').attr('checked', true).trigger('click');
致:

似乎效果不错:

$('input[name=check1]').attr('checked',true).change()

。on('changed',…)
无疑是您应该绑定到复选框元素上的内容(它的行为更加合理。然后您可以手动触发
。单击要切换状态的元素上的()(并查看处于与这些处理程序也看到的匹配状态的DOM)


$('input').on('change',函数(e){alert(e.target.value);});
$('input')。单击();
//查看警报,如果选中$(e.target).is(':checked'),则应为true

单击选中..再次单击取消选中..
这就是逻辑

$('input[name=check1]').prop('checked',!$('input[name=check1]').prop('checked'));

只是其他帖子的一个插件,因为我不能发表评论。我发现我不得不用字典来做道具


$('input[name=check1]').prop({'checked':!$('input[name=check1]').prop('checked'));

令人惊讶的是,这是有效的,但Pointy的解决方案看起来更合理。谢谢!谢谢。另一种处理triggerHandler只调用第一个匹配元素的疯狂的方法是使用
$('input:checkbox')。每个(函数(){$(this).prop('checked',true')).triggerHandler('change');});
代表@ChanceDurr,他没有评论权限:我发现我必须为prop使用字典;即:
$('input[name=check1]').prop({'checked':!$('input[name=check1]')).prop('checked'))
Hi Chance.欢迎光临,感谢您对堆栈溢出的贡献!我已将此表达为对相关答案的评论,并为您添加了标签。您介意删除此部分答案吗?
$('input:checkbox').triggerHandler('click');
$('input:checkbox').bind('click my-click', function() ... ) // or ".on()" with 1.7
$('input[name=check1]').attr('checked', true).trigger('click');
$('input[name=check1]').trigger('click').prop('checked', true);
<input type="checkbox" value="checked" name="check1">
<script>
    $('input').on('change', function(e) {alert(e.target.value);});
    $('input').click();
    // see the alert, and if you checked $(e.target).is(':checked') you should get true
</script>
$('input[name=check1]').prop('checked',!$('input[name=check1]').prop('checked'));