event获取兼容写法及阻止冒泡和默认事件

在我们写js的时候经常要用到event对象,你可能用它来阻止事件冒泡,或者阻止浏览器的默认行为,也可能得到鼠标的点击位置,鼠标的按键信息,还有可能得到键盘的按键信息,功能键的状态等。

首先我们来看下如何获取event对象呢?

第一种方法
<div class='cont' onclick='getEvent()'>
function getEvent(){
    var evt=window.event||arguments.callee.caller.arguments[0];
}

如果我们的事件中不给传递event对象的情况下,在IE中,event对象是作为window的属性的全局变量,我们可以很轻松的得到。但是在火狐浏览器下,event对象是一种现场对象,只有在事件触发的时候才会生成,她会作为火狐浏览器的响应事件的第一个参数传入。

解释一下arguments.callee.caller.arguments[0]:

当执行onclick=”getEvent()”时arguments.callee就是getEvent(),arguments.callee.caller就是function onclick,onclick的第一个能数就是event,也就是arguments.callee.caller.arguments[0]。这个在火狐下得到event对象的方法有一个限制,那就是函数不能在层次调用后再通过此方法得到event对象。

<div class='cont' onclick='getEvent()'>
function getEvent(){
       initEvent();
    }
function initEvent(){
var evt=window.event||arguments.callee.caller.arguments[0];//火狐下将得不到event对象。
}

像上面这种写法就是层次调用了,这个时候在内层方法中火狐用此方法是得不到event对象的。

第二种方法
function a(e){
e=e||window.event;
alert(e.keyCode);
} 

ie浏览器如下调用 :<body onclick="a()">
firefox火狐浏览器如下调用 <body onclick="a(event)">

阻止冒泡事件兼容写法

function stopBubble() {
    var e = window.event||arguments.callee.caller.arguments[0];
    if(e && e.stopPropagation){//其他浏览器
        e.stopPropagation();
    }else{ //IE浏览器
        e.cancelBubble = true;
    }
}

阻止默认事件兼容写法

很多的网页元素都会有默认的行为,比如说当你点击一下超链接a标签的时候,它会有一个跳转的行为;当你在网页上点鼠标右键时会出现一个右键菜;当你在一个form表单里点击提交按钮时网页会产生提交行为并刷新网页,当你网页上滚动鼠标滚轮时,网页的滚动条会动等等。这些都叫事件的默认行为,我们如果不需要,可以将这些事件阻止掉。

function stopEvent() {
    var e = window.event||arguments.callee.caller.arguments[0];
    if(e && e.preventDefault){//其他浏览器
       e.preventDefault();
    }else{ //IE浏览器
        e.returnValue=false;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 784评论 0 3
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,538评论 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,670评论 1 45
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,606评论 0 7
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,161评论 0 21