`

Js冒泡事件详解及阻止

    博客分类:
  • js
js 
阅读更多
Js冒泡机制是指如果某元素定义了事件A,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播,触发父类的click函数。
如下例所示:

    <html>
    <script type="text/javascript" src="jquery-1.7.1.js"></script>
    <script>
    function ialertdouble(e) {
    alert('innerdouble');
    stopBubble(e);
    }
    
    function ialertthree(e) {
    alert('innerthree');
    stopBubbleDouble(e);
    }
    
    function stopBubble(e) {
    var evt = e||window.event;
    evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡
    }
    
    function stopBubbleDouble(e) {
    var evt = e||window.event;
    evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡
    evt.preventDefault();//阻止浏览器默认行为,这样链接就不会跳转
    }
    
    $(function() {
    //方法一
    //$('#jquerytest').click(function(event) {
    // alert('innerfour');
    // event.stopPropagation();
    // event.preventDefault();
    //});
    
    //方法二
    $('#jquerytest').click(function() {
    alert('innerfour');
    return false;
    });
    });
    </script>
    <div onclick="alert('without');">without
    <div onclick="alert('middle');">middle
    <div onclick="alert('inner');">inner</div>
    <div onclick="ialertdouble(event)">innerdouble</div>
    <p><a href='http://www.baidu.com' onclick="ialertthree(event)">innerthree</a></p>
    <p id='jquerytest'><a href='http://www.baidu.com'>innerfour</a></p>
    </div>
    </div>
    </html>

当你点击inner的时候,会依次弹出‘inner’,‘middle’和‘without’。这就是事件冒泡。

从直观上来看,也是这样的,因为最里层的区域是在父级节点中的,点击了子级节点的区域,其实也是点击了父级节点的区域,所以事件会传播起来。

其实,很多的时候,我们并不想事件冒泡,因为这样会同时触发几个事件。

接下来:我们点击innerdouble。就会发现她并没有冒泡,因为她在调用的方法ialertdouble()中调用了stopBubble()方法,方法通过判断浏览器类型(Ie通过cancleBubble() 、firefox通过stopProgation())来阻止冒泡。

但如果是链接的话,我们会发现她也会阻止冒泡,但是会跳转,这就是浏览器的默认行为。需要借助preventDefault()方法来阻止。具体可以查看ialertthree()。

目前主流的都是借助jquery来绑定click事件的,这样的话,就简单多了。

我们可以在点击事件时传入参数event,然后直接

    event.stopPropagation();
    event.preventDefault(); //没有链接不需要加这个。

这样就可以了。

框架就是好,其实还有更简单的,在事件处理程序中返回false,这是对在事件对象上同时调用stopPropagation()和preventDefault()的一种简写方式。
【详细代码见上面,记得载入jquery.js。】

其实也还可以在每个click事件中加入判断:

    $('#id').click(function(event){
    if(event.target==this){
    //do something
    }
    })

解析:事件处理程序中的变量event保存着事件对象。而event.target属性保存着发生事件的目标元素。这个属性是DOM API中规定的,但是没有被所有浏览器实现 。jQuery对这个事件对象进行了必要的扩展,从而在任何浏览器中都能够使用这个属性。通过.target,可以确定DOM中首先接收到事件的元素(即实际被单击的元素)。而且,我们知道this引用的是处理事件的DOM元素,所以可以编写以上代码。

不过推荐使用return false,Jquery绑定事件的话。
更多请支持:http://www.webyang.net/Html/web/article_102.html
分享到:
评论

相关推荐

    Js冒泡事件详解及阻止示例

    如果某元素定义了事件A,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播

    javascript 中事件冒泡和事件捕获机制的详解

    javascript 中事件冒泡和事件捕获机制的详解 二者作用:描述事件触发时序问题 事件捕获:从document到触发事件的那个节点,即自上而下的去触发事件—由外到内 事件冒泡:自下而上的去触发事件—由内到外 绑定事件...

    js事件冒泡、事件捕获和阻止默认事件详解

    谈起JavaScript的 事件,事件冒泡、事件捕获、阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免。 1.事件冒泡 先来看一段代码: var $input = document.getElementsByTagName(input)[0]; var $...

    JS冒泡事件与事件捕获实例详解

    本文实例分析了JS冒泡事件与事件捕获。分享给大家供大家参考,具体如下: 案例 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;冒泡事件&lt;/title&gt; [removed] [removed] = function(){ ...

    JS阻止事件冒泡的方法详解

    &lt;&#37;@ Page Language=C# AutoEventWireup=true CodeFile=Default5.aspx.csInherits=Default5%&gt; &lt;!DOCTYPE ...&lt;... &lt;head runat=server&gt;...Porschev--

    javascript事件冒泡详解和捕获、阻止方法

    一、事件的发生顺序 这个问题的起源非常简单,假设你在一个元素中又嵌套了另一个元素 代码如下: ———————————– | element1 | | ————————- | | |element2 | | | ————————- | | ...

    详解javascript事件冒泡

    事件是javascript中的核心内容之一,在对事件的应用中不可避免的要涉及到一个重要的概念,那就是事件冒泡,在介绍事件冒泡之前,先介绍一下另一个重要的概念事件流: 一.什么是事件流: 文档对象模型(DOM)是一个树...

    js阻止冒泡和默认事件(默认行为)详解

    主要为大家详细介绍了js阻止冒泡和默认事件,即默认行为,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    微信小程序bindtap事件与冒泡阻止详解

    bindtap就是点击事件 在.wxml文件绑定: ...在后台.js文件中定义tapMessage函数: //index.js Page({ data: { mo: 'Hello World!!', userid : '1234', }, // 定义函数 tapMessage: function(event) { con

    详解vue事件对象、冒泡、阻止默认行为

    本篇文章主要介绍了详解vue事件对象、冒泡、阻止默认行为,这里整理了详细的代码,有需要的小伙伴可以参考下。

    JavaScript中捕获与冒泡详解及实例

    主要介绍了JavaScript中捕获与阻止捕获、冒泡与阻止冒泡详解及实例的相关资料,需要的朋友可以参考下

    关于javascript冒泡与默认事件的使用详解

    惭愧的是,我一直以为阻止冒泡是阻止父元素往子元素传递事件…… 贴上一串代码以便往后回顾! 代码如下:[removed] [removed]=function(){ var a=document.getElementById(“a”); var b=document.getElementById...

Global site tag (gtag.js) - Google Analytics