Javascript 事件propagation机制

101 阅读1分钟

Created by Jerry Wang, last modified on Oct 10, 2014

测试代码:

<html>

<script src="C:\Users\i042416\Desktop\jquery_1.7.1.js">

</script>

<script>

$(document).ready(function() {

 $("#test").click( function (){

 alert("four");

 //return false;

 });

});

function iamtwo(e) {

  alert("two");

  //stopBubble(e);

}

function iamthree(e) {

  alert("three");

  //stopBubbleDefault(e);

}

function stopBubble(e) {

    var evt = e||window.event;

    evt.stopPropagation?evt.stopPropagation():( evt.cancelBubble = true );

}

function stopBubbleDefault(e) {

    var evt = e||window.event;

    evt.stopPropagation?evt.stopPropagation():( evt.cancelBubble = true );

    evt.preventDefault();

}

</script>

<body>

<div οnclick="alert('outermost');">Outermost

   <div οnclick="alert('middle');"> middle

     <div οnclick="alert('inner');">inner</div>

   <div οnclick="iamtwo(event)">two</div>

   <p><a href=" www.baidu.com" οnclick="iamthree(event)">three </a></p>

   <p id="test"><a href=" www.baidu.com">four</a></p>

</div> <!-- end of middle !-->

</div> <!-- end of outermost !-->

</body>

</html>

UI上有6个元素:

clipboard1

点击Outermost: 弹出outermost字样的alert dialog

点击middle: 依次弹出middle,outermost的dialog

点击inner: 依次弹出inner, middle,outermost的dialog

点击two: 依次弹出two, middle,outermost的dialog

点击three: 依次弹出three, middle,outermost的dialog, 然后navigate到baidu webpage

点击four: 依次弹出four, middle,outermost的dialog, 然后navigate到baidu webpage

如果不希望two元素点击的event 冒泡到其parent hierarchy去,可将click handler iamtwo里的stopBubble行注释取消,之后点击就只会出现two dialog:

在这里插入图片描述

对于tag a 元素three,如果要阻止浏览器navigate到baidu website这一默认行为,需要调用event的preventDefault()方法:

clipboard3

如果是采用jQuery的click方法绑定的事件处理,只需在事件处理函数里返回false即可:

clipboard4\

\