在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”。

浏览器默认行为:

在form中按回车键就会提交表单;单击鼠标右键就会弹出context menu.

a标签

1..停止事件冒泡

JavaScript代码

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

2.阻止浏览器的默认行为

JavaScript代码

 element.onclick = function(event) {  

    event = event || window.event;   

 //如果提供了事件对象,则这是一个非IE浏览器 

 if (event&& event.preventDefault) {

   //阻止默认浏览器动作(W3C) 

         event.preventDefault();  

     } else { 

     //IE中阻止函数器默认动作的方式 

         window.event.returnValue = false;  

     }  

   //event.preventDefault?event.preventDefault():(event.returnValue = false);  

 }  

或者直接返回false:

element.onclick = function(event) {
//...
return false;
}

但是在使用return false时必须注意:
1、jQuery有自己的事件处理层,也对处理程序做了封装,如果事件处理程序返回false,事件冒泡和浏览器默认事件都会被阻止。
2、使用原生javaScript,在事件处理程序中返回false只会阻止浏览器默认行为,而事件冒泡依然存在。
3、浏览器默认行为和事件冒泡是相互独立的。阻止事件冒泡不会影响默认行为,反之亦然。

注意:
有一些浏览器行为是在事件处理程序执行前发生的,也就是说这些默认行为是无法取消的,如:在大部分浏览器上鼠标移到一个超链接上超链接的样式会发生改变,这个动作是发生在focus事件之前的,是focus事件处理程序中无法取消的。

摘自:http://blog.csdn.net/jquery_qq/article/details/51568816

http://www.cnblogs.com/yuzhongwusan/archive/2008/12/27/1363417.html

最新文章

  1. confirm对话框取消后阻止ajax操作、ajax做批量删除
  2. android控件库(1)-带删除功能的EditText
  3. java并发:获取线程执行结果(Callable、Future、FutureTask)
  4. CSS Hack (各个浏览器兼容的问题)
  5. Python开发之路
  6. Macro For Creating a dwStyle for a window without a menu bar and title bar
  7. Android 开发 8.0版本启动Service的方法
  8. 【洛谷P3455】ZAP-Queries
  9. Android studio 中的TabWidget
  10. python re模块记录
  11. 使用poi读写excel文件
  12. Linux下安装MySQL以及一些小坑
  13. 解题:SHOI 2012 回家的路
  14. 【网络文摘】Androidguy:当你的才华还无法撑起你的野心时,那么应该静下心来学习
  15. CTF中密码学一些基础【三】
  16. php 判断字符串之间包含关系
  17. 常用Path路径
  18. Android Studio Beat版公布!
  19. 【watcher】 #02 c# 中实现时间戳等,日期数字及大概率绝对随机数 实现
  20. the ssl module in Python is not available错误解决

热门文章

  1. Windows 下Java 连 MYSQL数据库
  2. animation几个比較好玩的属性(alternate,及animation-fill-mode)
  3. java多线程实验 滚动字
  4. linux命令(24):/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc
  5. 【Java】代理模式,静态代理和动态代理(基于JDK或CGLib)
  6. JDK和OpenJDK的区别
  7. buildroot 使用本地交叉编译器记录
  8. JVM 详谈
  9. Oracle分页(limit方式的运用)
  10. CDH离线安装