文档章节

javascript阻止冒泡和默认事件(默认行为)

zfx2016
 zfx2016
发布于 2016/10/19 11:42
字数 519
阅读 2
收藏 0

阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的domo就是很好的例子。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box {
				width: 300px;
				height: 300px;
				background: red;
				display: none;
			}
		</style>
		<script type="text/javascript">
			window.onload = function() {
					var btn = document.getElementById('btn');
					var box = document.getElementById('box');
					btn.onclick = function(ev) {
						var oEvent = ev || event;
						box.style.display = 'block';
						//oEvent.cancelBubble = true;//高版本浏览器
						stopBubble(oEvent);
						//在低版本的chrome和firefox浏览器中需要兼容性处理
						//高版本chrome和firefox浏览器直接使用上面这行代码即可
					}
					document.onclick = function() {
						box.style.display = 'none';
					}

				}
				//阻止冒泡事件的兼容性处理
			function stopBubble(e) {
				if(e && e.stopPropagation) { //非IE
					e.stopPropagation();
				} else { //IE
					window.event.cancelBubble = true;
				}
			}
		</script>
	</head>

	<body>
		<input type="button" id="btn" value="语言" />
		<div id="box"></div>
	</body>

</html>


我所实现的效果是:点击按钮btn让box显示,而点击其他地方则让box消失。

如果我不阻止冒泡的话,那么首先btn会触发点击时间,让盒子显示,但是由于box是包含在document中的,所以会向上冒泡又触发document的点击事件,盒子又消失。这个事件的执行顺序可以在不同的点击事件中使用alert来验证。关于cancelBubble的兼容性处理在高版本的chrome和firefox中已经不需要兼容处理了,直接使用oEvent.cancelBubble = true 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。


默认事件。即浏览器本身具备的功能。

function preventDefa(e){
	if(window.event){
		//IE中阻止函数器默认动作的方式 
		window.event.returnValue = false; 
	}
	else{
		//阻止默认浏览器动作(W3C) 
		e.preventDefault();
	} 
}
这种是兼容性写法,但是如果你只需要支持高版本浏览器的话,那么如上文一样,一句话即可。

btn.onclick = function (){
	return false;
}



© 著作权归作者所有

zfx2016
粉丝 1
博文 22
码字总数 14027
作品 0
广州
前端工程师
私信 提问
js阻止浏览器的默认行为以及停止事件冒泡(用JQuery实现回车提交,兼容IE、FF浏览器) ...

在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。 1.阻止浏览器的默认行为 [java] function stopDefault(e) { //如果提供了事件对象,...

java_T
2012/07/13
1K
0
阻止事件冒泡和浏览器的默认行为

javascript 1.阻止事件冒泡,使成为捕获型事件触发机制. function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器if ( e && e.stopPropagation ) //因此它支持W3C的stopPropaga...

JellyFlower
2014/06/27
550
0
总结jquery使用事件(复合事件、事件绑定等)

本文整理总结jquery事件,在使用jquery开发中,一定会使用到事件,下面是常用的事件。 1.$(document).ready() $(document).ready()是jQuery中响应JavaScript内置的onload事件并执行任务的一种...

^6^|^6^
2011/12/09
429
0
JavaScript零基础入门——(十三)JavaScript的事件

JavaScript零基础入门——(十三)JavaScript的事件 大家好,欢迎回到我们的JavaScript零基础入门。上一节课,我们了解了JavaScript定时器,也演示了一些比较经典的例子,其实我们已经用到了...

JandenMa
2018/07/01
61
0
Vue2.0笔记——事件对象,事件冒泡及默认行为

事件对象 关于事件即v-on在指令中已经介绍过,@简写也说过,就不再说明如何声明使用了。 我们可以在调用事件方法是为方法添加参数 $event,表示一个事件实例。 在处理方法中,得到这个实参,可...

逝岁月
2018/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

反编译9.png图片还原

本文链接:https://blog.csdn.net/a1140778530/article/details/10528507 经常反编译apk文件找资源,9.png的文件处理起来很麻烦。 最近使用Ant自动编译打包app时,从别处搜罗来的9.png文件导...

shzwork
30分钟前
6
0
Shell脚本应用 – for、while循环语句

一、for循环语句 在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同。例如:根据通讯录中的姓名列表创建系统账号等情况。 当面对各种...

linux-tao
30分钟前
5
0
RPA风潮下企业财务工作模式的变革

RPA(机器人流程自动化)在财务领域的应用,正给企业财务带来前所未有的改变。 前RPA时代,财务领域面临的痛点 在RPA机器人应用之前,企业财务工作进程的推进,主要通过财务人员人工操作或信...

UiBot
35分钟前
5
0
Hive之命令行修改表注释

最近遇到一个需求,在不重建表的情况下,修改表的注释,hive有没有类似关系型数据库的SQL命令来修改呢,找了下,亲测有效,如下List-1 List-1 hive>use your_schemahvie>ALTER TABLE tabl...

克虏伯
35分钟前
5
0
是什么,它的作用是什么

在HTML文档的首部往往会有这么一句话<!DOCTYPE html>,许多时候我们忽视了它的存在,它实际上是一个声明,告诉浏览器用哪种HTML版本的规范来解读HTML文档。 尽管我们不给出这句声明浏览器照样...

前端老手
41分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部