自己收集原生js-2014-2-23

本文介绍了一个实用的 JavaScript 工具包,其中包括事件处理的跨浏览器兼容解决方案及 AJAX 请求方法。该工具包提供了添加和移除事件监听器的功能,并支持页面加载完成后的回调函数,同时具备发送异步 HTTP 请求的能力。
(function(){})(
    window.EventUtil={
        addHandler:function(element,type,handler){
           // alert(1);
            if(element)
            {
                //alert(2);
                if(element.addEventListener)
                {
                   // alert(3);
                    element.addEventListener(type,handler,false);
                }else if(element.attachEvent)
                {
                   // alert(4);
                    element.attachEvent("on"+type,handler);
                }else{
                   // alert(5);
                    element["on"+type]=handler;
                }

            }
        },
        removeHandler:function(element,type,handler){
            if(element)
            {
                if(element.removeEventListener){
                    element.removeEventListener(type,handler,false);
                }else if(element.detachEvent){
                    element.detachEvent("on"+type,handler);
                }else{
                    element["on"+type]=null;
                }
            }

        },
        addReady: function(fn){
            if(document.addEventListener){//兼容非IE
                document.addEventListener("DOMContentLoaded",function(){
                    //注销事件,避免反复触发
                    document.removeEventListener("DOMContentLoaded",arguments.callee,false);
                    fn();//调用参数函数
                },false);
            }else if(document.attachEvent){//兼容IE
                IEContentLoaded (window, fn);
            }
            function IEContentLoaded (w, fn) {
                var d = w.document, done = false,
                // only fire once
                    init = function () {
                        if (!done) {
                            done = true;
                            fn();
                        }
                    };
                // polling for no errors
                (function () {
                    try {
                        // throws errors until after ondocumentready
                        d.documentElement.doScroll('left');
                    } catch (e) {
                        setTimeout(arguments.callee, 50);
                        return;
                    }
                    // no errors, fire

                    init();
                })();
                // trying to always fire before onload
                d.onreadystatechange = function() {
                    if (d.readyState == 'complete') {
                        d.onreadystatechange = null;
                        init();
                    }
                };
            }
        },
        getEvent:function(event){
            return event?window.event:event;
        },
        getEventTarget:function(event){
            return event.target||event.srcElement;
        },
        preventDefault:function(event){
            if(event.preventDefault){
                event.preventDefault();
            }else{
                event.returnValue=false;
            }
        },
        stopPropagation:function(event){
            if(event.stopPropagation){
                event.stopPropagation();
            }
            else{
                event.cancelBubble=true;
            }

        },

        ajax:(function (){
            function request (url,opt){
            function createXHR(){
                if(typeof XMLHttpRequest != "undefined"){
                    createXHR = function(){
                        return new XMLHttpRequest();
                    };
                }else if(typeof ActiveXObject != "undefined"){
                    createXHR = function(){
                        if(typeof arguments.callee.activeXString != "string"){
                            var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];
                            for(var i = 0, len = versions.length; i < len; i++){
                                try{
                                    var xhr = new ActiveXObject(version[i]);
                                    arguments.callee.activeXString = version[i];
                                    return xhr;
                                }catch(ex){
//skip
                                }
                            }
                        }
                        return new ActiveXObject(arguments.callee.activeXString);
                    };
                }else{
                    createXHR = function(){
                        throw new Error("No XHR Object available.");
                    };
                }
                return createXHR();
            }
            function fn(){}
            var async=opt.async!==false,
                method=opt.method||"Get",
                data=opt.data||null,
                success=opt.success||fn,
                failure=opt.failure||fn;
                method=method.toLocaleLowerCase();
            if(method=="get"&&data){
                url+=(url.indexOf('?')==-1?'?':'&')+data;
            }
            var xhr=createXHR();
            xhr.onreadystatechange=function(){
                _onStateChange(xhr,success,failure);
            }
            if(method=="post"){
                xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;');
            }
            xhr.open(method,url,async);
            xhr.send(data);
            return xhr;

        }
            function _onStateChange(xhr,success,failure){
                if(xhr.readyState == 4){
                    var s = xhr.status;
                    if(s>= 200 && s < 300){
                        success(xhr);
                    }else{
                        failure(xhr);
                    }
                }else{}
            }
            return {request:request}
        })()

        }
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值