关闭

兼容IE和Firefox的event对象

标签: firefoxiefunctionconstructornull
168人阅读 评论(0) 收藏 举报

IE 中可以直接使用 event 对象,而 FF 中则不可以,一般 可以通过以下两种方法满足event 对象需要:

第一种方法:
var theEvent = window.event || arguments.callee.caller.arguments[0];

第二种是将 event 作为参数来传递:
function xxx(e){var theEvent = window.event || e;}

以上两种方法只能用于事发现场,而像这种情况,则不能满足需要,因为它没有事发现场的event,例如:

function click() {
if (event.button==2) { 
alert('你想看什麽?') 
}  
if (event.button==1)  

alert('你想看作践?'); 

document.onmousedown=click

 

所以最好的方法就是重构firefox 中的event 对象,如下

<script>
/*firefox*/
function __firefox(){
    HTMLElement.prototype.__defineGetter__("runtimeStyle", __element_style);
    window.constructor.prototype.__defineGetter__("event", __window_event);
    Event.prototype.__defineGetter__("srcElement", __event_srcElement);
}
function __element_style(){
    return this.style;
}
function __window_event(){
    return __window_event_constructor();
}
function __event_srcElement(){
    return this.target;
}
function __window_event_constructor(){
    if(document.all){
        return window.event;
    }
    var _caller = __window_event_constructor.caller;
    while(_caller!=null){
        var _argument = _caller.arguments[0];
        if(_argument){
            var _temp = _argument.constructor;
            if(_temp.toString().indexOf("Event")!=-1){
                return _argument;
            }
        }
        _caller = _caller.caller;
    }
    return null;
}
if(window.addEventListener){
    __firefox();
}
/*end firefox*/
</script>

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34237次
    • 积分:679
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:4篇
    • 译文:0篇
    • 评论:3条
    最新评论