平时我们获取事件对象一般写法如下:
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;
}
分享到:
相关推荐
1. 首先,Firefox会调用一个内置的`onclick`事件处理函数,它会接收事件对象作为参数。 2. 然后,这个内置函数再调用用户定义的`foo()`函数,但不会自动将事件对象传递给`foo()`。 因此,在Firefox中,`foo()`中的`...
本文将详细介绍如何在不同浏览器环境中通过JavaScript获取浏览器临时目录的方法。 #### 二、背景知识 1. **浏览器安全模型**:现代浏览器为了保护用户隐私和数据安全,采用了严格的沙箱机制和同源策略,限制了网页...
在JavaScript中获取计算机硬件...总结,JavaScript获取计算机硬件信息的能力受到浏览器特性和安全策略的限制,而ActiveX和WMI是过去常用的一种方法,但随着技术的发展,这种方式逐渐被更安全、跨平台的解决方案所取代。
* onmouseover 和 onmouseout 事件的使用:这两个事件通常都是配合着使用,表示对一个对象的状态改变的两种最常见情形。 通过本节教学,学生将掌握 Event 对象的属性和方法,并能正确地使用 Event 对象来处理用户的...
在 JavaScript 事件机制中,事件 handler 是一个函数,它会在事件发生时被调用。事件 handler 可以通过多种方式添加到元素上,例如:直接将 JS 代码写在 HTML 上、定义一个函数、使用 element.onXXX 方式、使用 ...
首先,JavaScript的Date对象提供了一些内置的方法来操作日期,如`new Date()`创建一个新的日期实例,`getDate()`获取日期,`getMonth()`获取月份(注意,月份是从0开始的,所以1代表二月),`getFullYear()`获取四...
本文将详细讲解如何使用JavaScript的内置属性和方法来获取对象在页面中的位置坐标。 首先,我们需要理解两个关键的概念:`offsetTop` 和 `offsetLeft`。这两个属性都是HTML元素对象上的,它们分别表示元素的上边界...
我们可以通过创建一个特定月份的 `Date` 对象,并将其日期设置为该月的第一天或最后一天来获取该月的天数。 ##### 示例代码: ```javascript function getDaysInMonth(year, month) { // 创建一个新的 Date 对象...
这个事件一般用于实现滚动时的特定效果: ```javascript window.onscroll = move; ``` 4. `onBlur`事件:当元素失去焦点时触发,例如文本框、文本区域或选择框。`onBlur`和`onFocus`成对出现,表示元素的焦点...
事件处理在JavaScript中非常重要,`document.body`对象支持各种与用户交互相关的事件,如`onclick`、`onmouseover`和`onmouseout`。这些事件允许我们在用户与页面进行特定交互时执行函数。 总结来说,`document`...
继承是面向对象编程的另一个重要概念,它允许一个类获取另一个类的属性和方法。文中展示了两种实现继承的方法。第一种方法利用构造函数和apply、call方法来实现继承,这种方法的优点是可以实现多继承,但缺点是使用...
以上代码展示了如何使用JavaScript获取给定日期所在月份的第一个星期一和最后一个特定星期几。需要注意的是,这些方法都假设了传入的日期是有效且合法的。在实际应用中,可能需要进行错误检查和异常处理以确保代码的...
以上就是通过JavaScript获取DOM中class元素的方法和相关知识点的介绍。这涉及到对DOM操作的理解和对特定方法的应用,对于前端开发者来说是一项基础且重要的技能。掌握了这些知识点,开发者可以更加灵活地处理页面...
Firefox中,事件对象是作为函数的第一个参数传递的,而不是全局对象。因此,我们可以修改为如下形式: ```html (event.type);">Div1 Element ``` 在Firefox中,这种方式可以成功获取事件对象,而在其他支持`window....
JavaScript中的TextRange对象是一个用于操作HTML文档中文本流的重要接口,它允许开发者对页面中的文本执行一系列操作,如选择、搜索和修改。TextRange对象属于动态HTML(DHTML)的一部分,能够帮助开发者实现更加...
在探讨如何利用JavaScript获取系统时间之前,我们先来理解一下JavaScript中的Date对象,它是处理日期和时间的关键。Date对象提供了多种方法,可以用来获取当前或指定的日期和时间信息,包括年、月、日、小时、分钟、...
在JavaScript中获取当前位置的...综上所述,JavaScript获取经纬度涉及浏览器的Geolocation API,需要考虑兼容性、权限处理、精度等问题。在实际应用中,结合其他技术如地图API,可以构建出丰富的地理位置相关功能。
Window对象是javascript中的顶级对象,代表浏览器的一个窗口。它提供了许多有用的方法和属性,帮助我们更好地控制浏览器的行为。 1. Window.alert():弹出一个警告对话框,提示用户某些信息。 2. Window.confirm()...
JavaScript获取鼠标坐标是Web开发中的常见需求,尤其在交互式应用和动态效果中扮演着重要角色。本篇文章将详细介绍各种JavaScript方法来获取鼠标位置,并解释它们的用途和差异。 首先,我们可以使用`event`对象来...