js之事件冒泡和事件捕获

事件冒泡(的过程):事件从发生的目标(event.srcElement||event.target)开始,沿着文档逐层向上冒泡,到document为止。
事件捕获(的过程):则是从document开始,沿着文档树向下,直到事件目标为止。

关键一句:在IE浏览器中,只发生事件冒泡的过程;在W3C(或支持事件捕获的)浏览器中,先发生捕获的过程,再发生冒泡的过程。

想要添加一个由捕获过程触发的事件,只能这样了:
addEventListener('click',functionname,true);//该方法在IE下报错(对象不支持此属性或方法)

注:将第三个参数设置为true,表明该事件是为捕获过程设置的。如果第三个参数为false,则等同onclick =functionname;

<script type="text/javascript">
function $(id){
    return document.getElementById(id);
}
function altin(){
    alert("in");
}
function altmiddle(){
    alert("middle");
}
function altout(){
    alert("out")
}
window.οnlοad=function() {
    $('o').onclick = altout;
    //$('m').onclick = altmiddle;
    $('m').addEventListener('click',altmiddle,true);
    $('i').onclick = altin;
}
</script>
</head>

<body>
<div id="o" style="width:400px;height:400px;border:1px solid #CCCCCC;">
    <div id="m" style="width:200px;height:200px;border:1px solid #CCCCCC;">
        <div id="i" style="width:100px;height:100px;border:1px solid #CCCCCC;">
        </div>
    </div>
</div>
</body>
</html>

以上代码执行效果如下:

1、$('m').onclick = altmiddle;

a)当点击#i时,显示顺序为in,middle,out

b)当点击#m时,显示顺序为middle,out

c)当点击#o时,显示顺序为out

2、$('m').addEventListener('click',altmiddle,true);

a)当点击#i时,显示顺序为middle,in,out

b)当点击#m时,显示顺序为middle,out

c)当点击#o时,显示顺序为out

3、$('m').addEventListener('click',altmiddle,false);

a)当点击#i时,显示顺序为in,middle,out

b)当点击#m时,显示顺序为middle,out

c)当点击#o时,显示顺序为out

 

把事件捕获和冒泡的过程统称为事件的传播
事件的传播是可以阻止的:
• 在W3C中,使用stopPropagation()方法
• 在IE下设置cancelBubble = true;

在捕获的过程中stopPropagation()后,后面的冒泡过程也不会发生了~

阻止事件的默认行为,例如click <a>后的跳转~
• 在W3C中,使用preventDefault()方法;
• 在IE下设置window.event.returnValue = false;

注: 不是所有的事件都能冒泡,例如:blur、focus、load、unload,(这个是从别人的文章里摘过来的,我没测试)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 JavaScript 中,绑定点击事件的方法有很多种。其中比较常见的有以下几种: 1. 使用 HTML 的 onclick 属性:将一个函数名作为属性值指定给需要绑定点击事件的 HTML 元素,例如: ``` <button onclick="myFunction()">点击我</button> ``` 2. 使用 addEventListener() 方法:将事件类型(例如 "click")、事件处理函数以及一个可选的布尔值参数(指定事件处理函数是在冒泡阶段还是捕获阶段触发)作为参数,例如: ``` document.querySelector("#myButton").addEventListener("click", myFunction); ``` 3. 使用 attachEvent() 方法(仅适用于 IE 浏览器):将事件类型(例如 "click")和事件处理函数作为参数,例如: ``` document.querySelector("#myButton").attachEvent("onclick", myFunction); ``` 4. 使用 jQuery 的事件绑定方法:例如: ``` $("#myButton").on("click", myFunction); ``` 需要注意的是,以上几种方法中,函数名或事件处理函数都应该在代码中先定义好。此外,为了避免事件冲突或重复绑定,应注意使用正确的事件委托和事件绑定方式。 ### 回答2: 在JavaScript中,绑定点击事件是实现交互式功能的常见方法之一。常用的js绑定点击事件的方法有: 1. HTML中绑定:通过在HTML标签中添加onclick属性来绑定点击事件。例如: ``` <button onclick="alert('Hello World!')">点击我</button> ``` 这样点击按钮时就会弹出一个对话框显示“Hello World!”。 这种方式简单直接,但HTML和脚本代码耦合度高,不易维护。 2. DOM0级事件绑定:使用DOM对象的onclick属性来绑定点击事件。例如: ``` var btn = document.getElementById("myBtn"); btn.onclick = function() { alert('Hello World!'); } ``` 这里用DOM的getElementById方法获取id为“myBtn”的元素,然后为其onclick属性赋值一个函数,点击按钮时就会调用该函数弹出一个对话框。 这种方式比HTML绑定更灵活,但无法绑定多个事件处理程序,因为每次给onclick属性赋值都会覆盖之前的值。 3. DOM2级事件绑定:使用addEventListener方法为DOM元素添加事件处理程序。例如: ``` var btn = document.getElementById("myBtn"); btn.addEventListener("click", function() { alert('Hello World!'); }, false); ``` 这里用DOM的getElementById方法获取id为“myBtn”的元素,然后使用addEventListener方法为其添加一个click事件处理程序,点击按钮时会调用该函数弹出一个对话框。 这种方式更灵活可控,可以绑定多个事件处理程序,还可以决定事件处理程序是在捕获阶段还是冒泡阶段运行。不过在IE8及以下的浏览器中不支持该方法,需要使用attachEvent方法代替。 以上是js绑定点击事件的三种常用方式,选择哪种方法可以根据实际情况灵活应用。 ### 回答3: JS(JavaScript)作为一种常用的编程语言,为我们今天的网页设计工作提供了极大的帮助,包括为网页添加交互功能、形成更加美观的视觉体验等等。其中,js绑定点击事件也是我们常用的一种操作方法,可以方便地实现一些动态效果和用户操作功能。 实现js绑定点击事件的方法有很多,下面我为大家讲解几种常用的方式。 1. 通过HTML中的onclick属性 这是最简单的一种方法,可以在HTML标签中的onclick属性中直接绑定点击事件,实现起来非常方便。 实例如下: ``` <button onclick="alert('hello world!')">点击弹出信息</button> ``` 实现的效果就是,当用户点击按钮时,会弹出一个信息框,显示“hello world!”。 2. 使用addEventListener()方法 这也是我们比较常用的方法,通过addEventListener()方法向元素添加指定事件的监听器,然后在函数中实现所需要的操作。这种方式相比于第一种方法,有更多的自定义空间,更加灵活。 实例如下: ``` var btn = document.getElementById("btn"); btn.addEventListener("click", function(){ alert("hello world!"); }); ``` 这里我们通过document对象的getElementById()方法获取到一个id为“btn”的按钮元素,然后使用addEventListener()方法向该元素添加一个“click”事件的监听器,当这个事件被触发时,会弹出一个信息框,显示“hello world!”。 3. 使用jQuery库 如果你已经熟知jQuery这个知名的JS库,那么使用它来绑定点击事件也是一种极为方便的方式。 实例如下: ``` $("#btn").click(function(){ alert("hello world!"); }); ``` 这里我们通过jQuery的$()方法获取到一个id为“btn”的按钮元素,并使用click()方法绑定了一个点击事件的处理函数。当该按钮被点击时,也会弹出一个信息框,显示“hello world!”。 总之,JS绑定点击事件的方法有很多种,每种方法都有其独特的特点和应用场景,可根据自己的需要进行选择。不管使用哪种方法,都需要注意一些细节问题,如选择合适的元素、使用正确的事件类型、避免事件绑定重复等等,才能更好地实现我们的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wallacewan

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值