jquery的冒泡事件event.stopPropagation()

简介: jquery的冒泡事件event.stopPropagation()

js中的冒泡事件与事件监听

冒泡事件

js中“冒泡事件”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的冒泡应该 说是交换更加准确;js里面的“冒泡事件”才是真正意义上的“冒泡”,它从DOM最低层逐层遍历树,然后附加相应事件。以下面代码为例:

<title>冒泡事件</title>

<script type="text/javascript">

function Add(sText)

{

   document.getElementByIdx_x_x("Console").innerHTML +=sText;

}

</script>

</head>

<body οnclick="Add(’body事件触发<br />’)">

<div οnclick="Add(’div事件触发<br />’)">

   <p οnclick="Add(’p事件触发<br />’)" style="background:#c00;">点击</p>

</div>

<div id="Console" style="border:solid 1px #ee0; background:#ffc;"></div>

</body>

先执行p的事件,再执行div的事件,最后执行body事件.

事件监听

事件监听准确一点讲可以说是js引擎对用户鼠标、键盘、窗口事件等动作的监视进行的操作,也就是针对用户相应的操作进行附加事件,常用的类似 btnAdd.οnclick="alert(’51obj.cn’)"就是一种简单的附加事件,只不过这种方法不支持附加多个事件以及删除事件。以下代 码将实现附加事件后删除事件(IE下):

<script type="text/javascript">

<!–

var oP;

function window.onload(){

   oP=document.getElementByIdx_x_x("pContent");

   oP.attachEvent("onclick",Click);

}

function Click(){

   alert("做点什么吧");

   oP.detachEvent("onclick",Click);

}

//–>

</script>

</head>

<body>

<p id="pContent" style="border:solid 1px #d00; background:#cff;">点击</p>

IE不能称为标准的DOM浏览器,即使是最新的IE8,相对于标准DOM如Firefox、Opera等,它是个“异类”;在Firefox中才真正有称为事件监听的函数addEventListener,如下例

<script type="text/javascript">

<!–

window.οnlοad=function(){

   var oBtn=document.getElementByIdx_x_x("btn");

   oBtn.addEventListener("click",Click,false);

}

function Click(){

   alert("触发click事件");

}

//–>

</script>

<button id="btn">点击</button>

 

从上面两个例子看出attachEvent在Firefox中并不支持,IE也不支持addEventListener.因此需要使用兼容性的方法。

<script type="text/javascript">

<!–

var oBtn;

window.οnlοad=function(){

   oBtn=document.getElementByIdx_x_x("btn");

   if(window.addEventListener){

       oBtn.addEventListener("click",Click,false);

   }//FF,Opera…

   else if(window.attachEvent){

       oBtn.attachEvent("onclick",Click,false);

   }//IE

   else{

       oBtn.οnclick=Click;

   }//Other

}

function Click(){

   alert("事件只执行一次");

   if(window.addEventListener){

       oBtn.removeEventListener("click",Click,false);

   }//FF

   else if(window.attachEvent){

       oBtn.detachEvent("onclick",Click);

   }

   else{

       oBtn.οnclick=null;

   }

}

//–>

</script>

</head>

<body>

<button id="btn">www.51obj.cn&raquo;&raquo;</button>

</body>

*************************************************************************

在火狐Firefox、opera、IE下阻止冒泡事件是不同的代码的,火狐下使用的是event.stopPropagation(),而IE下使用的是cancelBubble,jQuery 可以使用e.stopPropagation()就可以兼容了,如果是纯粹的JavaScript需要下面的代码来统一:


if (event.stopPropagation) {

// this code is for Mozilla and Opera

event.stopPropagation();

}

else if (window.event) {

// this code is for IE

window.event.cancelBubble = true;

}


//就可以兼容哦

$("#msg").bind("click", function(e) {  

                           alert("div click");  

e.stopPropagation();

 });

*************************************************************************

event.preventDefault()

该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。


event.stopPropagation()

该方法将停止事件的传播,阻止它被分派到其他 Document 节点。在事件传播的任何阶段都可以调用它。注意,虽然该方法不能阻止同一个 Document 节点上的其他事件句柄被调用,但是它可以阻止把事件分派到其他节点。


event是DOM的事件方法,所以不是单独使用,比如指定DOM

目录
相关文章
N..
|
1月前
|
JavaScript 前端开发
jQuery事件处理
jQuery事件处理
N..
21 1
|
1月前
|
JavaScript 前端开发 索引
JQuery样式操作、click事件以及索引值-选项卡应用示例
JQuery样式操作、click事件以及索引值-选项卡应用示例
32 1
|
1月前
|
JavaScript
jquery动画与事件案例
jquery动画与事件案例
|
8月前
|
JavaScript 前端开发
前端基础 - JQuery事件切换(原来还有这种写法)
前端基础 - JQuery事件切换(原来还有这种写法)
36 0
|
8月前
|
JavaScript 前端开发 索引
Javascript知识【jQuery:数组遍历和事件】
Javascript知识【jQuery:数组遍历和事件】
|
1月前
|
JavaScript 前端开发 C++
【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
【5月更文挑战第2天】【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
|
1月前
|
JavaScript 前端开发
jQuery中的事件与动画
jQuery中的事件与动画
|
1月前
|
JavaScript
jQuery动画与事件概念以及语法
jQuery动画与事件概念以及语法
|
1月前
|
JavaScript
jQuery事件2-第6次课-给未来的元素绑事件-事件对象-JS盒模型-附案例、任务
jQuery事件2-第6次课-给未来的元素绑事件-事件对象-JS盒模型-附案例、任务
47 0
|
1月前
|
JavaScript 前端开发
jQuery事件1-第5次课-JQ的事件跟JS一样的作用,只是写法不一样-附案例、任务
jQuery事件1-第5次课-JQ的事件跟JS一样的作用,只是写法不一样-附案例、任务
46 0