`
ayue222
  • 浏览: 49471 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript 获取事件对象的一个注意点

阅读更多
平时我们获取事件对象一般写法如下:

function getEvent(event) {
    return event || window.event  // IE:window.event
}

如果没有参数,也可写成(非IE :事件对象会自动传递给对应的事件处理函数,且为第一个参数):

function getEvent() {
    return arguments[0] || window.event // IE:window.event
}


这样的写法在除 Firefox(测试版本:3.0.12,下同) 外的浏览器上运行都不会有问题,但 Firefox 为什么例外呢?让我们这样一种情形:

<button id="btn" onclick="foo()">按钮</button>
<script>
   function foo(){
       var e =  getEvent();
       alert(e);
   }
</script>


运行结果在 Firefox 中是 undefined,为什么呢?

在 Firefox 中调用其实是这样的,先调用执行的是:

function onclick(event) {
    foo();
}


然后调用执行的是:

function foo(){
   var e =  getEvent();
   alert(e);
}


会发现在 Firefox 下 onclick="foo()" 中的 foo() 无法自动传入事件对象参数,而默认传递给了系统生成的 onclick 函数,那本例我们可以通过 getEvent.caller.caller.arguments[0] 获得事件对象。

因此,我们的 getEvent 可以优化成(参照 yui_2.7.0b 中的 event/event-debug.js 中 getEvent 方法):

function getEvent(event) {
    var ev = event || window.event;
    if (!ev) {
        var c = this.getEvent.caller;
        while (c) {
            ev = c.arguments[0];
            if (ev && (Event == ev.constructor || MouseEvent  == ev.constructor)) { //怿飞注:YUI 源码 BUG,ev.constructor 也可能是 MouseEvent,不一定是 Event
            break;
            }
            c = c.caller;
        }
    }
    return ev;
}
分享到:
评论

相关推荐

    JavaScript 获取事件对象的注意点

    1. 首先,Firefox会调用一个内置的`onclick`事件处理函数,它会接收事件对象作为参数。 2. 然后,这个内置函数再调用用户定义的`foo()`函数,但不会自动将事件对象传递给`foo()`。 因此,在Firefox中,`foo()`中的`...

    javascript获取浏览器临时目录

    本文将详细介绍如何在不同浏览器环境中通过JavaScript获取浏览器临时目录的方法。 #### 二、背景知识 1. **浏览器安全模型**:现代浏览器为了保护用户隐私和数据安全,采用了严格的沙箱机制和同源策略,限制了网页...

    JavaScript 获取计算机硬件信息

    在JavaScript中获取计算机硬件...总结,JavaScript获取计算机硬件信息的能力受到浏览器特性和安全策略的限制,而ActiveX和WMI是过去常用的一种方法,但随着技术的发展,这种方式逐渐被更安全、跨平台的解决方案所取代。

    《javascript》——event对象与事件

    * onmouseover 和 onmouseout 事件的使用:这两个事件通常都是配合着使用,表示对一个对象的状态改变的两种最常见情形。 通过本节教学,学生将掌握 Event 对象的属性和方法,并能正确地使用 Event 对象来处理用户的...

    JavaScript事件机制详细研究

    在 JavaScript 事件机制中,事件 handler 是一个函数,它会在事件发生时被调用。事件 handler 可以通过多种方式添加到元素上,例如:直接将 JS 代码写在 HTML 上、定义一个函数、使用 element.onXXX 方式、使用 ...

    javascript获取当月第一天和最后一天

    首先,JavaScript的Date对象提供了一些内置的方法来操作日期,如`new Date()`创建一个新的日期实例,`getDate()`获取日期,`getMonth()`获取月份(注意,月份是从0开始的,所以1代表二月),`getFullYear()`获取四...

    JavaScript获取对象在页面中位置坐标的方法

    本文将详细讲解如何使用JavaScript的内置属性和方法来获取对象在页面中的位置坐标。 首先,我们需要理解两个关键的概念:`offsetTop` 和 `offsetLeft`。这两个属性都是HTML元素对象上的,它们分别表示元素的上边界...

    javascript获取当月天数

    我们可以通过创建一个特定月份的 `Date` 对象,并将其日期设置为该月的第一天或最后一天来获取该月的天数。 ##### 示例代码: ```javascript function getDaysInMonth(year, month) { // 创建一个新的 Date 对象...

    javaScript常用事件

    这个事件一般用于实现滚动时的特定效果: ```javascript window.onscroll = move; ``` 4. `onBlur`事件:当元素失去焦点时触发,例如文本框、文本区域或选择框。`onBlur`和`onFocus`成对出现,表示元素的焦点...

    Javascript的document对象

    事件处理在JavaScript中非常重要,`document.body`对象支持各种与用户交互相关的事件,如`onclick`、`onmouseover`和`onmouseout`。这些事件允许我们在用户与页面进行特定交互时执行函数。 总结来说,`document`...

    javascript面向对象特性代码实例

    继承是面向对象编程的另一个重要概念,它允许一个类获取另一个类的属性和方法。文中展示了两种实现继承的方法。第一种方法利用构造函数和apply、call方法来实现继承,这种方法的优点是可以实现多继承,但缺点是使用...

    js获取本月的第一个星期一

    以上代码展示了如何使用JavaScript获取给定日期所在月份的第一个星期一和最后一个特定星期几。需要注意的是,这些方法都假设了传入的日期是有效且合法的。在实际应用中,可能需要进行错误检查和异常处理以确保代码的...

    JavaScript实现获取dom中class的方法

    以上就是通过JavaScript获取DOM中class元素的方法和相关知识点的介绍。这涉及到对DOM操作的理解和对特定方法的应用,对于前端开发者来说是一项基础且重要的技能。掌握了这些知识点,开发者可以更加灵活地处理页面...

    js中获取事件对象的方法小结

    Firefox中,事件对象是作为函数的第一个参数传递的,而不是全局对象。因此,我们可以修改为如下形式: ```html (event.type);"&gt;Div1 Element ``` 在Firefox中,这种方式可以成功获取事件对象,而在其他支持`window....

    JavaScript中textRange对象使用方法小结

    JavaScript中的TextRange对象是一个用于操作HTML文档中文本流的重要接口,它允许开发者对页面中的文本执行一系列操作,如选择、搜索和修改。TextRange对象属于动态HTML(DHTML)的一部分,能够帮助开发者实现更加...

    JavaScript获取系统时间(转载)

    在探讨如何利用JavaScript获取系统时间之前,我们先来理解一下JavaScript中的Date对象,它是处理日期和时间的关键。Date对象提供了多种方法,可以用来获取当前或指定的日期和时间信息,包括年、月、日、小时、分钟、...

    javascript获取经纬度

    在JavaScript中获取当前位置的...综上所述,JavaScript获取经纬度涉及浏览器的Geolocation API,需要考虑兼容性、权限处理、精度等问题。在实际应用中,结合其他技术如地图API,可以构建出丰富的地理位置相关功能。

    javascript常用对象及方法

    Window对象是javascript中的顶级对象,代表浏览器的一个窗口。它提供了许多有用的方法和属性,帮助我们更好地控制浏览器的行为。 1. Window.alert():弹出一个警告对话框,提示用户某些信息。 2. Window.confirm()...

    Javascript获取鼠标坐标的各种类型

    JavaScript获取鼠标坐标是Web开发中的常见需求,尤其在交互式应用和动态效果中扮演着重要角色。本篇文章将详细介绍各种JavaScript方法来获取鼠标位置,并解释它们的用途和差异。 首先,我们可以使用`event`对象来...

Global site tag (gtag.js) - Google Analytics