平时我们获取事件对象一般写法如下:
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;
}
分享到:
相关推荐
平时我们获取事件对象一般写法如下: 代码如下: function getEvent(event) { return event || window.event // IE:window.event } 如果没有参数,也可写成(非IE :事件对象会自动传递给对应的事件处理函数,且为第...
当text对象或textarea对象以及select对象不再拥有焦点、而退到后台时,引发该文件,他与onFocas事件是一个对应的关系。 5.onFocus事件:光标进入文本框时触发调用函数。 当用户单击Text或textarea以及select对象时,...
获取一个JavaScript对象的大小(以字节为单位) JavaScript不提供sizeof(类似于C语言),并且程序员无需关心内存分配/重新分配。 但是,根据,每个String值均由16位无符号整数表示,Number使用双精度64位格式IEEE...
15.9.2 注册多个事件 15.9.3 删除事件 15.9.4 Microsoft Internet Explorer中的事件监听器 15.9.5 回顾事件属性 15.10 不唐突的JavaScript 15.11 应知应会 练习 第16章 ...
第4章 JavaScript基于对象编程 4.1 面向对象编程与基于对象编程 4.1.1 什么是对象 4.1.2 面向对象编程 4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 ...
13.5.1 事件处理模式--一个实现简单事件处理模式的例子 13.5.2 用户事件接口的定义 13.5.3 事件代理和事件注册--一个实现标准事件接口的例子 13.5.4 标准模式--事件分派和接收 13.6 一个例子--...
JavaScript电子书,包括了JavaScript的大部分知识,可以帮助读者快速入门。内容如下: 第1章 JavaScript语言概述 1.1 JavaScript是什么 1.1.1 JavaScript简史 1.1.2 JavaScript有何特点 1.2 JavaScript能做什么 ...
本文实例为大家分享了JavaScript实现换肤效果的具体代码,供大家参考,具体内容如下 换肤效果:点击不同图片,更换相应页面背景 实现思路 1、定义一组图片,每个src属性赋值背景图片路径 2、获取一组图片元素...
第一章JavaScript基础 1. 如何实现JavaScript 4 (1) 如何把JavaScript代码放到HTML页面里 4 使用[removed]标签,直接在HTML代码里加入JavaScript代码 4 使用[removed]调用外部的JavaScript(.js文件) 4 如何...
本文实例讲述了javascript中clipboardData对象用法。分享给大家供大家参考。具体分析如下: clipboardData对象 ,注意网页里剪贴板到现在只能设置Text类型,即只能复制文本 clearData(“Text”)清空粘贴板 getData...
|--x.toString():用于把一个 Number 对象转换为一个字符串,并返回结果 19.正则表达式对象:(专门用于查找和验证) reg.test(‘要验证的完整字符串’)匹配返回true,否则返回false 强调:如果正则表达式使用了^和$...
例如通过表达式定位DOM中的一个对象或一系列对象,一个例子就是定位id属性中含有某个特殊字符的div对象。 3)纯编程逻辑。直接用于编程的逻辑之中。 3,说明:本部分所举的正则表达式的代码片断,都是经过测试的,但...
3、获取图片元素对象,将鼠标的 x , y 坐标 分别赋值给图片的 left , top 值,为了时鼠标在图片中间,可以减去图片宽高的一半,让图片位置向上向左,注意:不要忘记加上单位 ‘px' 小知识: e.clientX- - -获取...
Javascript 对象模板 Javascript 对象的模板 如何使用? 使用描述类型和默认值的布局对象创建模板。 如果默认值为 null,则该字段可以是任何类型。 var JOT = require ( 'javascript-object-templates' ) ; // ...
它可以让你获取一个 JavaScript 数组并查询它。 查询包括过滤、下钻、合成、排序和/或聚合的一个或多个步骤。 它还可选地允许您生成动态结果,这样如果原始 Array 中的任何内容发生更改,查询结果将立即反映这些...
3、定义一个计算当前时间和设定时间- - -时间差的函数,将剩余天数、小时、分、秒分别计算计算出来,并赋值给相应的与元素内容 4、使用setInterval()函数,设置每隔1秒执行一次时间差函数, 5、注意setInterval()...
范围一个为Javascript对象实现私有和受保护范围的库。 支持原型继承,并且可以应用于新对象或现有对象。 作用域模块暴露出defineProperty方法,该方法的扩展Object.defineProperty一起列入一个新的scope可设定为任一...
内容索引:脚本资源,Ajax/JavaScript,框架 dBank 又一款开源的Javascript框架集,bBank 是一个轻量级的js框架,提供了css选择器来获取dom对象,ajax等一些功能。 使用bBank的css选择器来获取一个dom对象或dom对象...
本文实例为大家分享了JavaScript获取当前年份、星期、时间的方法,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head...