JS中点击事件冒泡解析

关于Javascript中的点击事件冒泡的问题,很多初学者都处理不好。

什么是点击事件冒泡?

例:

今天我去小明家找他玩。正好小明、小明的爸爸、小明的爷爷在客厅一起看电视。

我对小明说:”咱们出去玩吧“。

小明十分乐意的回答到:”好啊“。

小明的爸爸听到后,说到:”把作业写完后在出去玩“。

小明的爷爷也发话了:”预报有雷阵雨,就别出去玩了“。

我本来只是询问一下小明的意见,结果他爸比和爷爷对我说的话做出的反应影响到了小明接下来的行为。

这次之后,我和小明私下约定好。以后去找他玩的,都会去他房间里讲话,避免他家人听到。

这就叫事件阻止行为,只有天知地知你知我知,避免其他人造成不必要的影响。

废话说了那么多,不知道大家明白了没有。直接上代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>点击事件冒泡处理</title>
    <script type="text/javascript">
        var fun1 = function (e) {
            alert("我是父点击事件");
        }
        var fun2 = function (e) {
            e.stopPropagation();//阻止点击事件向上冒泡
            alert("我是子点击事件");
        }
    </script>
</head>
<body>
    <div onclick="fun1(event)" style="height:100px;background-color:black;color:white;text-align:center;border:1px solid red">
        父节点
        <div onclick="fun2(event)" style="margin-top:20px;border:1px solid red;height:30px">
            子节点
        </div>
    </div>
</body>
</html>

子节点的点击事件会上父一级传递的,就像上述代码中说表明的,在点击事件触发fun2的时候,接下来也会触发fun1。在大部分的逻辑中,我们不是很希望这样。在就需要在点击子节点的时候,中止父节点接下来的行为。

再补充一点比较特殊的点击事件:

如果要取消某些DOM元素单击后的缺省处理函数,比如转到其它页面或是提交表单,为了取消这些缺省实际处理,可以调用e.preventDefault()。

备注:这里只是对一般情况的点击事件冒泡做了说明。

时间: 2024-10-11 13:18:14

JS中点击事件冒泡解析的相关文章

ext 3.2 tree 在IE10中点击事件失效的bug

ext3.2 中的tree在IE中进行兼容性测试,遇到IE10时,无法点击,其他版本的IE(7.8.9.11)均正常.此bug是由于ext-all.js中的getAttributeNS方法不能兼容IE10出错引起的,下载了ext3.4,这里的getAttributeNS 被重写了,将3.4中的方法写入3.2中的ext-all.js文件中,IE10中tree恢复正常. 修改前: getAttributeNS: Ext.isIE ? function(s, q) { var t = this.dom

Android中点击事件的四种写法详解

Android中点击事件的四种写法使用内部类实现点击事件使用匿名内部类实现点击事件让MainActivity实现View.OnClickListener接口通过布局文件中控件的属性 第一种方法:使用内部类基本步骤如下: 新建一个MyOnClickListener类并实现View.OnClickListener接口 重写View.OnClickListener接口中的OnClick(View view)方法 给Button绑定一个监听器,并监听一个点击事件示例代码如下: public class

Android中点击事件的处理解析及常见问题

      当我们手指按下时,Android采用层层传递-冒泡的方式处理点击事件.例如,现在公司来了个小项目,老板一看分配给经理做,经理一看分配给小组长,小组长一看好简单,分配给组员.如果在这个传递过程中(也就是还为分配到最底部时),某一层觉得我来负责这个比较好的话就会拦截掉这个消息,然后把它处理了,下面的就收不到有消息的这个通知.如果一直到了底层的话,组员如果能完成,就完成它.如果不能完成,那么就报告给组长,说组长我做不来,边学边做要影响进度.组长一看我也做不来,就给经理,经理一看我也不会,就

iOS Safari 中点击事件失效的解决办法

问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. 可以使用下面的代码在 iOS 中进行测试. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content=&qu

JS如果阻止事件冒泡和浏览器默认事件

原地址:http://missra.com/article/web-57.html 嵌套的标签元素,如果父元素和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下JavaScript阻止默认事件与JavaScript阻止事件冒泡示例. (1)阻止冒泡事件 注:嵌套元素一般都存在冒泡事件,会带来某些影响 最外层标签:outer,中间层标签:center,最内层标签:inner,并且在outer.center.inner都添加了alert弹框事件,在正常思维情况下

JS学习之事件冒泡

(1)什么是事件起泡      首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生. 当事件发生后,这个事件就要开始传播.为什么要传播呢?因为事件源本身并没有处理事件的能力.例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身不能处理这个事件(废话),事件必须从这个按钮传播出去,从而到达能够处理这个事件的代码中(例如我们给按钮的onclick属性赋一个函数的名字,就是让这个函数去处理该按钮的click事件).

JS中的事件冒泡和事件捕获

事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target). 事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签. 用图示表示如下: 1.冒泡事件: 事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发.通俗来讲就是,就是当设定了多个div的嵌套时:即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发了子div的onclick事件后,子div进行相应的js操作,但是父div的onclick事件

JS如何阻止事件冒泡

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default5.aspx.cs"Inherits="Default5"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/

js中阻止事件冒泡和浏览器默认行为

在使用javascript编程时会遇到一个问题,就是当你给html添加事件时,由于浏览器默认的为冒泡型事件触发机制,所以会触发你不想触发的事件.那么通过如下的函数可以解决这个问题.[兼容IE和FF] 1.阻止事件冒泡,使成为捕获型事件触发机制. function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C的stopPropagation()方法 e.stopPropagat