Johnny_Z

jQuery中的事件传播也即是javascript中的事件传播。

事件传播分为两个阶段,一个是Capture(捕获)阶段,另一个是Bubble(冒泡)阶段。

下面就分别讲一下这两个阶段。先用一张图来总体表示一下:

clip_image002

比如说,我们点击了页面上id为picture的img元素,暂时只关心click事件,那么实际上它是从根元素html依次递归到点击的元素,这里为img元素,当然如果点击到了id为son的div元素,它就会递归到该div元素,这一阶段称为捕获阶段。该阶段中如果有任何祖先元素监听了click事件,那么都会触发该事件。

那么,从点击到的img元素开始,依次向祖先元素递归,一直到达顶级祖先元素,这一过程称为冒泡阶段。该阶段中,如果有任何祖先元素监听了click事件,也会触发。

我们也可以概括为捕获阶段是从祖先元素(根节点)到达目标元素;冒泡阶段是从目标元素到达祖先元素(根)。

明白了这一过程后,我们来看一段代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
  $(\'*\').each(function () {
    var current = this;
    this.addEventListener(\'click\', function (event) {
      say(\'捕获\' + current.tagName + \'元素,id为\' + current.id + \',目标元素:\' + event.target.id);
    }, true);
    this.addEventListener(\'click\', function (event) {
      say(\'冒泡\' + current.tagName + \'元素,id为\' + current.id + \',目标元素:\' + event.target.id);
    }, false);
  })
});
function say(text) {
  $(\'#show\').append(\'<div>\' + text + \'</div>\');
}
</script>
</head>
<body>
<div id=\'father\'>
  <div id=\'son\'>
    <img id="flower" alt="" src="images/Tulips.jpg" width="300px" height="200px" />
  </div>
</div>
<div id="show">
</div>
</body>
</html>

代码中使用了addEventListener方法为元素注册事件。该方法的第一个参数为事件类型,第二个参数为回调方法,第三个参数为在哪一个阶段捕获事件,若为true则是捕获阶段,若为false则是冒泡阶段。运行结果:

clip_image003

如果我们想在冒泡阶段阻止事件向祖先元素传播,我们也可以调用Event实例中的stopPropagation()方法。

Demo下载

分类:

技术点:

相关文章:

  • 2021-11-27
  • 2021-04-21
  • 2022-12-23
  • 2021-11-27
  • 2021-11-11
  • 2021-11-27
  • 2022-12-23
  • 2021-11-27
猜你喜欢
  • 2021-11-27
  • 2021-11-27
  • 2021-11-27
  • 2021-11-02
  • 2021-11-27
  • 2021-11-27
相关资源
相似解决方案