原文链接:http://caibaojian.com/javascript-stoppropagation-preventdefault.html

事件兼容

function myfn(e){ var evt = e ? e:window.event; }

JS停止冒泡

function myfn(e){
window.event? window.event.cancelBubble = true : e.stopPropagation();
}

js阻止默认行为

function myfn(e){
window.event? window.event.returnValue = false : e.preventDefault();
}

以下是具体关于javascript停止冒泡和阻止默认行为的详细说明

防止冒泡

w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true

stopPropagation也是事件对象(Event)的一个方法,作用是阻止目标元素的冒泡事件,但是会不阻止默认行为。什么是冒泡事件?如在一个按钮是绑定一个”click”事件,那么”click”事件会依次在它的父级元素中被触发 。stopPropagation就是阻止目标元素的事件冒泡到父级元素。如:

<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>
<li onclick='alert("li");'>test</li>
</ul>
</div>

上面的代码,Demo如下,我们单击test时,会依次触发alert(“li”),alert(“ul”),alert(“div”),这就是事件冒泡。

  • 测试冒泡

阻止冒泡

window.event? window.event.cancelBubble = true : e.stopPropagation();
  • 停止冒泡

阻止默认行为

w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;

preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为。既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了。什么元素有默认行为呢?如链接<a>,提交按钮<input type=”submit”>等。当Event 对象的 cancelable为false时,表示没有默认行为,这时即使有默认行为,调用preventDefault也是不会起作用的。

我们都知道,链接<a>的默认动作就是跳转到指定页面,下面就以它为例,阻止它的跳转:

//code from http://caibaojian.com/javascript-stoppropagation-preventdefault.html
//假定有链接<a href="http://caibaojian.com/" id="testA" >caibaojian.com</a>
var a = document.getElementById("testA");
a.onclick =function(e){
if(e.preventDefault){
e.preventDefault();
}else{
window.event.returnValue == false;
}
}

演示:阻止链接跳转的默认行为
caibaojian.com

return false

javascript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡。

下面这个使用原生js,只会阻止默认行为,不会停止冒泡

<div id='div'  onclick='alert("div");'>
<ul  onclick='alert("ul");'>
<li id='ul-a' onclick='alert("li");'><a href="http://caibaojian.com/"id="testB">caibaojian.com</a></li>
</ul>
</div>
var a = document.getElementById("testB");
a.onclick = function(){
return false;
};

演示:阻止链接默认行为,没有停止冒泡

  • caibaojian.com

下面这个是使用jQuery,既阻止默认行为又停止冒泡

<div id='div'  onclick='alert("div");'>
<ul  onclick='alert("ul");'>
<li id='ul-a' onclick='alert("li");'><a href="http://caibaojian.com/"id="testC">caibaojian.com</a></li>
</ul>
</div>
$("#testC").on('click',function(){
return false;
});

演示:既停止冒泡又阻止默认行为

  • caibaojian.com

总结使用方法

当需要停止冒泡行为时,可以使用

function stopBubble(e) {
//如果提供了事件对象,则这是一个非IE浏览器
if ( e && e.stopPropagation ) //因此它支持W3C的stopPropagation()方法 e.stopPropagation();
else //否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true;
}

当需要阻止默认行为时,可以使用

//阻止浏览器的默认行为
function stopDefault( e ) { //阻止默认浏览器动作(W3C) if ( e && e.preventDefault ) e.preventDefault(); //IE中阻止函数器默认动作的方式 else window.event.returnValue = false; return false;
}

事件注意点

  1. event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等;
  2. event对象只在事件发生的过程中才有效。

firefox里的event跟IE里的不同,IE里的是全局变量,随时可用;firefox里的要用参数引导才能用,是运行时的临时变量。
在IE/Opera中是window.event,在Firefox中是event;而事件的对象,在IE中是window.event.srcElement,在Firefox中是event.target,Opera中两者都可用。

  1. 下面两句效果相同:
function a(e){
var e = (e) ? e : ((window.event) ? window.event : null);
var e = e || window.event; // firefox下window.event为null, IE下event为null
}

JavaScript停止冒泡和阻止浏览器默认行为相关推荐

  1. js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 转载...

    js添加事件.移除事件.阻止冒泡.阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 网上有关这方面的代码比较多而乱,这里整理一下并加以改进. 添加事件 01    var addEvent = ...

  2. js /jquery停止事件冒泡和阻止浏览器默认事件

    var el = window.document.getElementById("a");el.onclick = function (e) {//如果提供了事件对象,则这是一个非 ...

  3. html js 禁用浏览器上下滑动,纯JS阻止浏览器默认滚动事件,实现自定义滚动方法...

    首先该方法兼容IE7+以上浏览器,可以实现页面上下滚动,而且也可以实现页面左右滚动,每次滚动的距离为屏幕的大小,滚动为加速滚动 javaScript代码如下: //滚动实现方法,使用鼠标滚轮每次滚动浏 ...

  4. vue阻止浏览器默认事件

    项目中遇到长按.鼠标右键等操作时,会出发浏览器的默认事件,这时候我们要阻止浏览器默认事件,在vue中阻止默认事件,可以使用 @contextmenu.prevent=""实现

  5. js阻止浏览器默认事件

    1.阻止浏览器的默认行为 function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) { / ...

  6. JS 事件高级(包括DOM事件流,阻止事件冒泡,阻止事件默认行为,,,以及对我来说,很好用的 事件代理)

    事件对象概念 事件处理函数:事件发生时调用的函数 事件对象:window.event,内置的对象,事件发生的时候会将所有和事件相关的信息都存储在事件对象中,鼠标位置,事件类型,事件目标... //事件 ...

  7. 阻止浏览器默认行为事件

    欢迎访问我的博客地址 : 博客地址 有时候我们在页面中需要阻止浏览器的默认行为事件,在W3C的方法是e.preventDefault(),IE则是使用e.returnValue = false,pre ...

  8. vue移动端长按文字、图片阻止浏览器默认行为

    首先说一下我们项目的需求,需要在浏览器中做一个像某X那种长按消息可以撤回的功能.先展示一下最终的效果图. OK, now let's look at the code,Warning:全是干货! &l ...

  9. javascript下载图片而不是浏览器默认打开图片

    dataURLtoBlob(dataurl) {var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],bstr = atob( ...

最新文章

  1. swoole 要求php版本,swoole哪个版本支持php5
  2. python pdf-有没有好一点的读取 PDF 的 Python 包?
  3. how to collect staff from lovespace
  4. VTK修炼之道70:体绘制讨论_光照阴影、VTKLODProp3D
  5. java解决策略膨胀_折腾Java设计模式之策略模式
  6. python学习笔记4(对象/引用;多范式; 上下文管理器)
  7. 版本控制-代码和文档等用SVN管理
  8. 4G江湖大战全面开启 移动4G用户数突破9000万
  9. “SecureCRT遇到一个致命的错误且必须关闭”处理办法
  10. Linux 系统SVN客户端安装-支持https
  11. 计算机网络布线需要什么材料,计算机网络综合布线的设计方法与流程
  12. iTextSharp 添加文字内容
  13. Matlab 画图控制速度,matlab常用画图操作
  14. 遗传算法详解(GA)(个人觉得很形象,很适合初学者)
  15. ps入门第8天_ps通道_颜色通道Alpha通道 案例:通道抠图
  16. IDEA运行项目时停不下来
  17. BLE_BQB Test_Intermodulation Performance, uncoded data at 1 Ms/s_RF-PHY/RCV/BV-05-C
  18. Android系统移植与调试之-------build.prop文件详细赏析
  19. 《牡丹亭》中的情与理
  20. 电脑开机密码,强制修改,覆盖原密码

热门文章

  1. maven编译时出现读取XXX时出错invalid LOC header (bad signature)
  2. 关于JAVA中log4j与logslf4j打印日志用法
  3. 带权重的随机输出数组中的元素
  4. Linear and Discrete Optimization - Week 1
  5. 在 Ubuntu 下安装 Discuz! 7.0
  6. Python进程和线程保姆式教学,1个台机子多只手干活的秘籍
  7. java oracle数据回滚,误操作ORACLE生产数据利用闪回查询备份恢复数据-java-51CTO博客...
  8. Centos8 使用auditd配置系统审计
  9. Linux chattr命令详解
  10. JAVA 中 string 和 int 互相转化