Heim  >  Artikel  >  Web-Frontend  >  js中的preventDefault与stopPropagation详解_javascript技巧

js中的preventDefault与stopPropagation详解_javascript技巧

WBOY
WBOYOriginal
2016-05-16 17:01:381145Durchsuche

首先讲解一下js中preventDefault和stopPropagation两个方法的区别:
preventDefault方法的起什么作用呢?我们知道比如百度,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于标签的默认行为,而preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情。看一段代码大家就明白了:

复制代码 代码如下:





JS阻止链接跳转



百度




此时点击百度链接,不会打开http://www.baidu.com,而只是弹出一个alert对话框。

preventDefault方法讲解到这里,stopPropagation方法呢?讲stopPropagation方法之前必需先给大家讲解一下js的事件代理。

事件代理用到了两个在JavaSciprt事件中常被忽略的特性:事件冒泡以及目标元素。当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。对任何一个事件来说,其目标元素都是原始元素,在我们的这个例子中也就是按钮。目标元素它在我们的事件对象中以属性的形式出现。使用事件代理的话我们可以把事件处理器添加到一个元素上,等待事件从它的子级元素里冒泡上来,并且可以很方便地判断出这个事件是从哪个元素开始的。

stopPropagation方法就是起到阻止js事件冒泡的作用,看一段代码。

复制代码 代码如下:




阻止JS事件冒泡传递(cancelBubble 、stopPropagation)

<script><BR>function doSomething (obj,evt) {<BR> alert(obj.id);<BR> var e=(evt)?evt:window.event;<BR> if (window.event) {<BR> e.cancelBubble=true;// ie下阻止冒泡<BR> } else {<BR> //e.preventDefault();<BR> e.stopPropagation();// 其它浏览器下阻止冒泡<BR> }<BR>}<BR></script>



 

This is parent1 div.


 

 

This is child1.


 

 

This is parent1 div.






 

This is parent2 div.


 

 

This is child2. Will bubble.


 

 

This is parent2 div.






大家运行一下上面的代码就明白了。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn