<a> (href) inherited by its children?</a>的默认行为

时间:2013-10-26 00:59:25

标签: javascript jquery html dom

Demo on jsfiddle.net

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>)?我可以参考哪些规格? 提前致谢。

2 个答案:

答案 0 :(得分:2)

  

为什么<a>的默认行为是由其子级继承的?

因为它有意义:-)每次点击链接或其后代都会触发一个事件,其默认操作是激活链接。

  

我可以参考哪些规格?

检查DOM级别3规范中的Default actions and cancelable events以获取取消说明。但是,DOM3本身并未指定任何默认操作。

这些是在HTML 5规范中完成的,专门用于Interactive Content section

中的点击
  

单击指点设备时,用户代理必须执行以下步骤:

     
      
  1. [设置一些标志]
  2.   
  3. e成为用户指定元素的nearest activatable element(如果有)。要获得它,请检查   目标是否具有已定义的激活行为。如果确实如此,请   它,如果它没有(并有一个父元素),那么重复   使用目标元素进行检查。
  4.   
  5. 如果有元素e,请为其执行预先单击激活步骤(如果有)。
  6.   
  7. 发送所需的click活动。
  8.   
  9. 如果有元素e并且未取消点击事件,请运行   如果有的话,点击后点击激活步骤。
  10.   
  11. 如果有元素e并且事件被取消,则运行已取消   激活步骤(如果有的话)。
  12.   
  13. [重置标志]
  14.   

激活行为由元素本身定义,例如在<a> element获取并遵循超链接。

答案 1 :(得分:1)

请在这里查看这个答案:

does e.stopPropagation() in jquery works on anchor tag

您可以与event.preventDefault();结合使用,以获得所需的行为。 StopPropagation可以阻止事件被触发,但不会触发默认行为,例如在点击<a>标记时导航到页面。