特性说明和原理图:
- 标准浏览器和Ie9+浏览器都支持事件的冒泡和捕获,而IE8-浏览器只支持冒泡
- 标准和Ie9+浏览器用stopPropagation()或cancelBubble阻止事件传播,而ie8-用e.cancelBubble属性来阻冒泡,注意ie9不支持cancelBubble属性(设置后不生效),但chrome、safari、opera、firefox都支持cancelBubble属性。
- Ie8-用attachEvent为dom元素添加一个事件,但必须在事件名前加上on,此类事件只能在元素的冒泡阶段。
- stopPropagatin()方法用于阻止事件的传播,如果设置在捕获阶段,则目标和冒泡阶段不会被执行;
- cancelBubble属性只能阻止冒泡阶段,对捕获和目标阶段的事件不能阻止
- preventDefault()和window.event.returnValue用于标准浏览器和ie9+,都可以阻止默认事件。ie8-可以用returnValue,preventDefault()。
示例代码(ie8-示例不提供)
HTML代码
层级关系:body->wrap->cont->button,可以对照上面的原理
Js代码
') var timeIndex = window.setTimeout(function(){ $dom.css({ 'borderColor': color,'borderWidth': '4px' }); },time); } //捕获 $body[0].addEventListener('click',function(event){ $log.html($log.html() + "-------------------"); setBorderColor($body,'#0866ff ',event); },true); $wrap[0].addEventListener('click',function(event){ setBorderColor($wrap,'yellow',2000,event); },true); $cont[0].addEventListener('click',function(event){ event = event || window.event; if( $stopType.val() == '1' ){ event.stopPropagation(); }else{ event.cancelBubble = true; } setBorderColor($cont,'green',1000,event); },true); $btn.addEventListener('click',function(event){ setBorderColor($btn,'red',true); $btnReject[0].addEventListener('click',function(event){ setBorderColor($btnReject,'gray ',true); //冒泡 $body[0].addEventListener('click',function(event){ setBorderColor($body,false); $wrap[0].addEventListener('click',false); $cont[0].addEventListener('click',function(event){ setBorderColor($cont,false); $btn.addEventListener('click',false); $btnReject[0].addEventListener('click',false); //阻止默认事件 $inTxt.keypress(function(event){ //event.preventDefault(); window.event.returnValue = false; $body.append( String.fromCharCode( event.keyCode )); }); });