您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/10/20 15:45:22发布31次查看
js冒泡机制是指如果某元素定义了事件a,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播,触发父类的click函数。
如下例所示:
复制代码 代码如下:
without
middle
inner
innerdouble
innerthree
innerfour
当你点击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绑定事件的话。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product