在写JS的时候,我们很多情况下不得不考虑IE和FF的兼容性。很简单的,IE中的event和FF中的event就不一样,获取方式也不一样,比如IE中event是全局window对象的属性,而FF中却没有。有很多时候我们要获取触发事件的源对象(在IE中是srcElement),下面给出两种方式。
一、在函数中传递event参数
在函数中传递event参数,这样我们就可以兼容IE和FF的event的获取了,如下面的函数:
function _test(evt)
{
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
var iKeyCode = evt.keyCode || evt.which; //获取按钮代码
alert(src.value); // 打印该对象的value属性
if (window.navigator.userAgent.indexOf("IE")>=1)
{
evt.keyCode =0;
evt.returnValue=false;
}
else
{
evt.preventDefault();
}
}
那么我们在使用的时候就应该这样:
<input type='button' value='click me' οnclick='_test(event)' />
二、在函数调用中不传递event对象
虽然在函数中没有传递参数,这个在IE下没有任何影响,因为window.event是全局对象,在什么地方都可以直接调用的,而在FF下就不行了。所以我们这里要使用另外一种方式来获取了,如下:
function _test2()
{
var evt = window.event || arguments.callee.caller.arguments[0]; // 获取event对象
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
var iKeyCode = evt.keyCode || evt.which; //获取按钮代码
alert(src.value); // 打印该对象的value属性
if (window.navigator.userAgent.indexOf("IE")>=1)
{
evt.keyCode =0;
evt.returnValue=false;
}
else
{
evt.preventDefault();
}
}
那么,我们在使用的时候就可以想普通的函数调用一样,直接输入函数名称即可,如下:
<input type='button' value='click me2' οnclick='_test2()' />
可见,相比两种方法,第二种方法更具有普遍和通用性,因为可以不用传递参数了,这样在使用的时候也更加的方便;第一种方式就更加直接明了,呵呵,至于具体怎么用,还得看个人的了~~
FF代替IE的window.event的方法,不用带参
出处:http://blog.lwfeel.com/post/window-event.php
原先写js的时候没注意浏览器兼容问题,见window.event用得爽就狂用,发现问题时为时已晚,N多页面都是直接用了。在网上搜了好多让火狐兼容window.event的方法。大同小异都是要调用函数时带个参数。
最简单的是下面这样滴。
function testEvent(e)
{
Evt=window.event?window.event:e
alert(Evt);
}
<a οnclick="testEvent(event)">test</a>
虽然只是多加一个参考,但那足以让我不爽……
因为之前写页面时忘了考虑兼容,如果要加参数的话我要一个个改到哭死。不好还好,篇了好多页后终于找到了不用带参的方法(真不明白有用的资源竟排不到第一页)
以下是代码:
function getEvent()
{
if(document.all) return window.event;
func=getEvent.caller;
while(func!=null)
{
var arg0=func.arguments[0];
if(arg0)
{
if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
{
return arg0;
}
}
func=func.caller;
}
return null;
}
//测试event函数
function testEvent()
{
var Evt = getEvent();
alert(Evt);
}
<a οnclick="testEvent(event)">test</a>
具体原理懒得打上来了,反正我自己也懒得看。偷懒偷懒。