JS如果阻止事件冒泡和浏览器默认事件
原地址:http://missra.com/article/web-57.html
嵌套的标签元素,如果父元素和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下JavaScript阻止默认事件与JavaScript阻止事件冒泡示例。
(1)阻止冒泡事件
注:嵌套元素一般都存在冒泡事件,会带来某些影响
最外层标签:outer,中间层标签:center,最内层标签:inner,并且在outer、center、inner都添加了alert弹框事件,在正常思维情况下如果只点击内层元素,只会弹出绑定在该元素上的alert事件,但是,由于冒泡事件的原因,如果只点击内层元素首先触发被点击的内层元素的事件,然后会依次向外(向上级)冒泡触发外层事件,如下:
HTML:
|
1
2
3
4
5
|
<div id="outer" onclick="alert('Outer');">outer <div id="center" onclick="alert('Center');">center <div id="inner" onclick="alert('Inner');">inner</div> </div></div> |
CSS:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#outer { width:300px; border:1px solid #888; text-align:center; backgrond-color:#888; margin:0 auto;}#center { margin:20px; border:1px solid #aaa; text-align:center; backgrond-color:#aaa;}#inner { margin:20px; border:1px solid #ccc; text-align:center; text-align:center; backgrond-color:#ccc;} |
试想如果在项目开发中,某个按钮和他的父级同时绑定了很重要的事件,那么结果会惨不忍睹,这时的处理方法就是阻止冒泡事件,用下面的JS来阻止冒泡事件的发生。
JS代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
var outerDom = document.getElementById("outer");var centerDom = document.getElementById("center");var innerDom = document.getElementById("inner");//阻止冒泡事件function stopBubble(e) {if (e && e.stopPropagation) {e.stopPropagation(); } else {window.event.cancelBubble = true; }//等价语句//window.event ? e.stopPropagation() : window.event.cancelBubble = false;}//为每个元素对象添加监听事件,如果监听到元素触发"click"事件,就引用上面阻止冒泡的方法stopBubble()来阻止冒泡事件的发生outerDom.addEventListener("click",function(e) {stopBubble(e);})//阻止outer冒泡centerDom.addEventListener("click",function(e) {stopBubble(e);})//阻止center冒泡innerDom.addEventListener("click",function(e) {stopBubble(e);})//阻止inner冒泡 |
用以上的JS代码阻止冒泡事件后效果如下:
(2)阻止默认事件
在前端开发工作中,由于浏览器兼容性等问题和一些特殊用处,比如禁止浏览器右键、禁止浏览器菜单等,需要用到阻止浏览器的默认事件
示例:阻止超链接
如下链接
阻止打开链接此默认事件,JS代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13 var aDom = window.document.getElementById("a");
aDom.onclick = function (e) {
//如果提供了事件对象,则这是一个非IE浏览器
if (e && e.preventDefault) {
//阻止默认浏览器动作(W3C)
e.preventDefault();
}
else {
//IE中阻止函数器默认动作的方式
window.event.returnValue = false;
return false;
}
}
使用以上JS脚本后的效果如下:
点击链接的时候正常情况下会发生跳转,但是现在我们阻止了它的默认事件,即跳转事件,这时就不会跳转到玫莎了(备注:由于网站编辑器的原因无法给链接添加ID,所以演示的链接还是能打开)。
(3)jQeury阻止默认和冒泡事件
备注:一下代码中的"a"是元素标签,可以是"#id"或者".class"或者DOM对象
阻止冒泡事件
1
2
3 $("a").click(function (e) {
e.stopPropagation();
});
阻止默认事件
1
2
3 $("a").click(function (e) {
e.preventDefault();
});
阻止默认和冒泡事件
1
2
3 $("a").click(function (e) {
return false;
});
JS如果阻止事件冒泡和浏览器默认事件的更多相关文章
- js中阻止事件冒泡和浏览器默认行为
在使用javascript编程时会遇到一个问题,就是当你给html添加事件时,由于浏览器默认的为冒泡型事件触发机制,所以会触发你不想触发的事件.那么通过如下的函数可以解决这个问题.[兼容IE和FF] ...
- JS 事件冒泡整理 浏览器的事件流
JavaScript与HTML的交互通过事件来实现.而浏览器的事件流是一个非常重要的概念.不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议, 只需要知道在DOM2中规定的事件流包括了三个部分,事件捕 ...
- JS事件——禁止事件冒泡和禁止默认事件
Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 一.什么是事件冒泡 在一 ...
- javascript(九)事件冒泡 onmouseenter onmouseenter 默认事件 和 键盘事件
1 事件冒泡 子元素触发的事件,会往上(父元素)传递: 例子: <div id="box"> <p></p> </div> < ...
- JS阻止事件冒泡与浏览器默认行为
阻止冒泡 W3C的方法是e.stopPropagation() IE是e.cancelBubble = true; 阻止默认行为 W3C的方法e.preventDefault(), IE是e.retu ...
- 理解阻止浏览器默认事件和事件冒泡cancelBubble
一.阻止浏览器默认事件 1.先举个例子说什么是 浏览器的默认事件 : 比如有一个输入框,当我按下字母a,就会在输入框显示字母a.就是浏览器本该发生的事情.小孩子一出生就会汲取母乳一样的道理,这些都是先 ...
- 一个取消事件的简单js例子(事件冒泡与取消默认行为)
先上代码: <div id='outer' onclick='alert("我是outer")'> <div id="middle" oncl ...
- js /jquery停止事件冒泡和阻止浏览器默认事件
1>js阻止冒泡事件 var el = window.document.getElementById("a"); el.onclick = function (e) { // ...
- javascript阻止事件冒泡和浏览器的默认行为
1.阻止事件冒泡,使成为捕获型事件触发机制. 1 function stopBubble(e) { 2 //如果提供了事件对象,则这是一个非IE浏览器 3 if ( e && e.st ...
随机推荐
- 包含块、层叠上下文、BFC
包含块 什么是包含块?简单来说,就是决定一个元素大小和定位的元素.一个元素会为它的内部元素创建包含块,但也不能说元素的包含块就是它的父元素: 1.position:fixed 的元素 包含块是当前可视 ...
- 11.编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。
package com.hanqi.yzljs; public class yzljs { public static void main(String[] args) { final dou ...
- 【转】C++的继承与多态:为什么需要虚函数
转自:http://www.educity.cn/zk/gjyy/201306271108011682.htm 多态性是面向对象设计语言的基本特征.仅仅是将数据和函数捆绑在一起,进行类的封装,使用一些 ...
- js 获取浏览器版本号
1.在web开发中,会常常让你推断当前使用的是那个浏览器及浏览器的那个版本号,依据浏览器版本号来调整CSS的样式, 使在web界面在各个浏览器展现达到最佳的效果,以下是获取当前浏览器的代码: getB ...
- 【VBA研究】变量定义的类型和实际赋值类型
作者:iamlaosong VBA中变量能够先定义后使用,也能够不定义直接使用.假设模块前面加了Option Explicit语句,则变量必须先定义后使用. 只是.实验发现.VBA对变量类型没有进行严 ...
- 摄像机(CCCamera)
- 【转】coco2d-x 纹理研究
1.通常情况下用PVR格式的文件来进行图片显示的时候,在运行速度和内存消耗方面都要比PNG格式要快和小.一般情况下PVR消耗的内存比PNG消耗的内存小25%左右.PVR格式可以用ZWoptex导出.P ...
- Storm 中遇到的问题
问题1. 在storm.yaml 中配置了4个slot,而在Storm UI上面看到了8个slot 解决:Storm.yaml 中配置错误,正确配置如下,- 和 6700 之间是有空格存在的,而在我 ...
- Centos如何设置静态IP地址,LINUX怎么修改IP地址
1.登陆连接centos系统,输入 ifconfig 可以查看到当前本机的IP地址信息 2.临时设置IP地址: 输入 ifconfig eth0 (默认是第一个网卡) 后面接IP地址, 网络掩码和 网 ...
- Linux常用系统调用
转载 http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html#icomments 按照惯例,这个列表 ...