首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery选中复选框并触发javascript onclick事件

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

Stack Overflow用户
提问于 2012-04-22 21:13:29
回答 6查看 57.7K关注 0票数 25

我正在尝试使用jQuery选中一个复选框,并在流程中触发onclick事件。

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

代码语言:javascript
运行
复制
<input type="checkbox" value="checked" name="check1" onclick="alert(this.value);">

我有一个在函数中触发的jQuery语句:

代码语言:javascript
运行
复制
$('input[name=check1]').attr('checked', true);

结果是复选框被选中,但是javascript onclick事件没有被触发(因此没有警报)。但如果我手动触发点击:

代码语言:javascript
运行
复制
$('input[name=check1]').attr('checked', true).trigger('click');

结果是复选框被选中,javascript onclick事件被触发(并且值被正确获取),但在那之后复选框被取消选中。

有人能告诉我怎样才能实现我想要做的事吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-22 21:15:05

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

代码语言:javascript
运行
复制
$('input[name=check1]').attr('checked', true).triggerHandler('click');

此外,请使用.prop()而不是.attr()

代码语言:javascript
运行
复制
$('input[name=check1]').prop('checked', true).triggerHandler('click');

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

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

代码语言:javascript
运行
复制
$('input:checkbox').triggerHandler('click');

则只会触发页面上的第一个复选框。我通常会用我自己的假事件名和“click”来绑定处理程序:

代码语言:javascript
运行
复制
$('input:checkbox').bind('click my-click', function() ... ) // or ".on()" with 1.7

这样我就可以触发"my-click“,两全其美:库在所有匹配的元素上触发处理程序,但它不会切换元素的实际状态。

票数 54
EN

Stack Overflow用户

发布于 2012-04-22 21:15:30

更改:

代码语言:javascript
运行
复制
$('input[name=check1]').attr('checked', true).trigger('click');

至:

代码语言:javascript
运行
复制
$('input[name=check1]').trigger('click').prop('checked', true);
票数 13
EN

Stack Overflow用户

发布于 2012-04-22 21:25:44

this answer似乎工作得很好:

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

jsFiddle demo

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10268222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档