события окна JavaScript - PullRequest
       7

события окна JavaScript

0 голосов
/ 21 апреля 2010

Мне бы хотелось, чтобы следующая функция работала со всеми объектами, поддерживающими события, передавая соответствующее событие, а не только для загрузки.

function eve(ev, fnc) {
    if(typeof window.addEventListener!= 'undefined'){
        window.addEventListener('load',fnc,false); 
        }elseif(typeof window.attachEvent!='undefined'){
        window.attachEvent('onload', fnc );
    }else{
        var old = this.onload;  
        this.onload=function(e){  
            old();  
            fnc();  
        };
    }
}
// for instance onclick
eve('onclick', myFunc);

Любые идеи оценят

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

Самый простой и надежный способ сделать это - использовать библиотеку, чтобы сделать это за вас, например Прототип , jQuery , Закрытие и т. Д. Таким образом, вы получаете выгоду от того, что другие люди находят и сообщают / исправляют ошибки, а не делают все это самостоятельно. : -)

Но:

DOM-элементы также имеют addEventListenerattachEvent в IE), поэтому для этого довольно просто создать общую функцию:

function hook(obj, event, handler) {

    if (obj.attachEvent) {
        obj.attachEvent("on" + event, handler);
    }
    else if (obj.addEventListener) {
        obj.addEventListener(event, handler);
    }
    else {
        // Fail, probably
    }
}

(Обратите внимание, что вариант IE использует "on" [например, "onclick"], стандарт не ["click"].)

Немного эффективнее протестировать один раз , а затем использовать то, что имеет браузер:

var hook = (function() {
    var elm = document.createElement('div');

    if (elm.attachEvent)
    {
        return hookWithAttachEvent;
    }
    if (elm.addEventListener)
    {
        return hookWithAddEventListener;
    }
    return hookFail;

    function hookWithAttachEvent(obj, event, handler) {

        obj.attachEvent("on" + event, handler);
        return obj;
    }

    function hookWithAddEventListener(obj, event, handler) {

        obj.addEventListener(event, handler);
        return obj;
    }

    function hookFail() {
        throw "Don't know how to hook events on this platform.";
    }
})();

Один раз определяет, какой вариант следует использовать, и возвращает функцию, использующую этот вариант, которая затем будет вызываться непосредственно при использовании hook.

0 голосов
/ 21 апреля 2010

function eve(obj, ev, fnc) { if(typeof window.addEventListener!= 'undefined'){ obj.addEventListener(ev.replace(/on/,""),fnc,false); }elseif(typeof window.attachEvent!='undefined'){ obj.attachEvent(ev, fnc ); }else{ var old = obj[ev]; obj[ev]=function(e){ old(); fnc(); }; } } // for instance onclick eve(obj, 'onclick', myFunc);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...