首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现部分preventDefault()?

如何实现部分preventDefault()?
EN

Stack Overflow用户
提问于 2012-07-06 14:10:31
回答 3查看 558关注 0票数 5

有一个<label>,里面有一个<a href="#">元素。我希望防止<a>元素的默认行为(即导航),但它应该执行<label>元素的默认行为(即选中其中的复选框)。

测试用例:http://jsfiddle.net/3M6WE/。单击foo可切换复选框。单击bar不会导航,但也不会切换复选框。

如何让<a>元素不导航,但让它切换复选框?我想避免像手动切换复选框这样的黑客。我正在寻找一个“部分”的preventDefault,如果可用的话。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-06 14:21:02

您可以触发父元素(标签)的单击:

http://jsfiddle.net/3M6WE/11/

代码语言:javascript
运行
复制
$("a").on("click", function(e) {
    e.stopPropagation();
    $(this).parent().click();
    // do stuff...
    e.preventDefault();
});

然后执行一些魔术,最后调用preventDefault();

票数 4
EN

Stack Overflow用户

发布于 2012-07-06 14:16:41

我想你不能阻止这一切:

来自MDN

单击嵌套元素中的事件 从壁虎8.0开始(火狐8.0 /雷鸟8.0 / SeaMonkey 2.5),一个冒泡的点击事件最多触发一个<label>,合成点击事件不能触发其他<label>。在壁虎中,单击事件仍会冒泡过<label>,而在WebKit或Internet中,单击事件将在<label>停止。Gecko8.0之前的行为(触发多个<label> )导致火狐停止响应(参见bug 646157 )。

票数 2
EN

Stack Overflow用户

发布于 2012-07-06 14:19:55

http://jsfiddle.net/3M6WE/10/怎么样?通过删除href='#'来简化您的问题。

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

https://stackoverflow.com/questions/11363868

复制
相关文章

相似问题

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