HTML:
<a href='http://www.jsfiddle.net'><span>link</span></a>
脚本:
$('span').click(function(event) {
window.open('http://www.google.com');
event.stopImmediatePropagation();
//The line below does prevent jsfiddle.net from loading on the right.
//event.preventDefault();
});
$('a').click(function() {
//This function is not triggered as event propagation has been stopped.
alert('You will never see this.');
});
单击演示中的“链接”将导致打开google.com和jsfiddle.net。我的问题出现了:为什么<a>
(在这种情况下打开jsfiddle.net)的默认行为是由其子项继承的(在这种情况下为<span>
)?我可以参考哪些规格?
提前致谢。
答案 0 :(得分:2)
为什么
<a>
的默认行为是由其子级继承的?
因为它有意义:-)每次点击链接或其后代都会触发一个事件,其默认操作是激活链接。
我可以参考哪些规格?
检查DOM级别3规范中的Default actions and cancelable events以获取取消说明。但是,DOM3本身并未指定任何默认操作。
这些是在HTML 5规范中完成的,专门用于Interactive Content section:
中的点击单击指点设备时,用户代理必须执行以下步骤:
- [设置一些标志]
- 让
e
成为用户指定元素的nearest activatable element(如果有)。要获得它,请检查 目标是否具有已定义的激活行为。如果确实如此,请 它,如果它没有(并有一个父元素),那么重复 使用目标的父元素进行检查。- 如果有元素
e
,请为其执行预先单击激活步骤(如果有)。- 发送所需的
click
活动。- 如果有元素
e
并且未取消点击事件,请运行 如果有的话,点击后点击激活步骤。- 如果有元素
e
并且事件被取消,则运行已取消 激活步骤(如果有的话)。- [重置标志]
醇>
激活行为由元素本身定义,例如在<a>
element获取并遵循超链接。
答案 1 :(得分:1)
请在这里查看这个答案:
does e.stopPropagation() in jquery works on anchor tag
您可以与event.preventDefault();
结合使用,以获得所需的行为。 StopPropagation可以阻止事件被触发,但不会触发默认行为,例如在点击<a>
标记时导航到页面。