亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

JavaScript常用腳本匯總(一)

2024-05-06 16:16:07
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了JavaScript常用腳本匯總系列的第一篇,給大家分享的是jquery限制文本框只能輸入數字、封裝DOMContentLoaded事件、用原生JS對AJAX做簡單封裝、跨域請求之JSONP、千分位格式化,有需要的小伙伴們參考下吧。
 

jquery限制文本框只能輸入數字

jquery限制文本框只能輸入數字,兼容IE、chrome、FF(表現效果不一樣),示例代碼如下:

 

復制代碼代碼如下:

$("input").keyup(function(){ //keyup事件處理
   $(this).val($(this).val().replace(//D|^0/g,''));
}).bind("paste",function(){ //CTR+V事件處理
   $(this).val($(this).val().replace(//D|^0/g,''));
}).css("ime-mode", "disabled"); //CSS設置輸入法不可用

 

上面的代碼的作用是:只能輸入大于0的正整數。

 

復制代碼代碼如下:

$("#rnumber").keyup(function(){  
        $(this).val($(this).val().replace(/[^0-9.]/g,''));  
    }).bind("paste",function(){  //CTR+V事件處理  
        $(this).val($(this).val().replace(/[^0-9.]/g,''));   
    }).css("ime-mode", "disabled"); //CSS設置輸入法不可用

 

上面代碼的作用是:只能輸入0-9的數字和小數點。

封裝DOMContentLoaded事件

 

復制代碼代碼如下:

//保存domReady的事件隊列
    eventQueue = [];
    //判斷DOM是否加載完畢
    isReady = false;
    //判斷DOMReady是否綁定
    isBind = false;
    /*執行domReady()
     *
     *@param    {function}
     *@execute  將事件處理程序壓入事件隊列,并綁定DOMContentLoaded
     *          如果DOM加載已經完成,則立即執行
     *@caller
     */
    function domReady(fn){
        if (isReady) {
            fn.call(window);
        }
        else{
            eventQueue.push(fn);
        };
        bindReady();
    };
    /*domReady事件綁定
     *
     *@param    null
     *@execute  現代瀏覽器通過addEvListener綁定DOMContentLoaded,包括ie9+
     ie6-8通過判斷doScroll判斷DOM是否加載完畢
     *@caller   domReady()
     */
    function bindReady(){
        if (isReady) return;
        if (isBind) return;
        isBind = true;
        if (window.addEventListener) {
            document.addEventListener('DOMContentLoaded',execFn,false);
        }
        else if (window.attachEvent) {
            doScroll();
        };
    };
    /*doScroll判斷ie6-8的DOM是否加載完成
     *
     *@param    null
     *@execute  doScroll判斷DOM是否加載完成
     *@caller   bindReady()
     */
    function doScroll(){
        try{
            document.documentElement.doScroll('left');
        }
        catch(error){
            return setTimeout(doScroll,20);
        };
        execFn();
    };
    /*執行事件隊列
     *
     *@param    null
     *@execute  循環執行隊列中的事件處理程序
     *@caller   bindReady()
     */
    function execFn(){
        if (!isReady) {
            isReady = true;
            for (var i = 0; i < eventQueue.length; i++) {
                eventQueue[i].call(window);
            };
            eventQueue = [];
        };
    };
    //js文件1
    domReady(function(){
    });
    //js文件2
    domReady(function(){
    });
    //注意,如果是異步加載的js就不要綁定domReady方法,不然函數不會執行,
    //因為異步加載的js下載之前,DOMContentLoaded已經觸發,addEventListener執行時已經監聽不到了

 

用原生JS對AJAX做簡單封裝

首先,我們需要xhr對象。這對我們來說不難,封裝成一個函數。

 

復制代碼代碼如下:

var createAjax = function() {
    var xhr = null;
    try {
        //IE系列瀏覽器
        xhr = new ActiveXObject("microsoft.xmlhttp");
    } catch (e1) {
        try {
            //非IE瀏覽器
            xhr = new XMLHttpRequest();
        } catch (e2) {
            window.alert("您的瀏覽器不支持ajax,請更換!");
        }
    }
    return xhr;
};    

 

然后,我們來寫核心函數。

 

復制代碼代碼如下:

var ajax = function(conf) {
    // 初始化
    //type參數,可選
    var type = conf.type;
    //url參數,必填 
    var url = conf.url;
    //data參數可選,只有在post請求時需要
    var data = conf.data;
    //datatype參數可選    
    var dataType = conf.dataType;
    //回調函數可選
    var success = conf.success;
    if (type == null){
        //type參數可選,默認為get
        type = "get";
    }
    if (dataType == null){
        //dataType參數可選,默認為text
        dataType = "text";
    }
    // 創建ajax引擎對象
    var xhr = createAjax();
    // 打開
    xhr.open(type, url, true);
    // 發送
    if (type == "GET" || type == "get") {
        xhr.send(null);
    } else if (type == "POST" || type == "post") {
        xhr.setRequestHeader("content-type",
                    "application/x-www-form-urlencoded");
        xhr.send(data);
    }
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            if(dataType == "text"||dataType=="TEXT") {
                if (success != null){
                    //普通文本
                    success(xhr.responseText);
                }
            }else if(dataType=="xml"||dataType=="XML") {
                if (success != null){
                    //接收xml文檔    
                    success(xhr.responseXML);
                }  
            }else if(dataType=="json"||dataType=="JSON") {
                if (success != null){
                    //將json字符串轉換為js對象  
                    success(eval("("+xhr.responseText+")"));
                }
            }
        }
    };
};       

 

最后,說明一下此函數的用法。

 

復制代碼代碼如下:

    ajax({
        type:"post",
        url:"test.jsp",
        data:"name=dipoo&info=good",
        dataType:"json",
        success:function(data){
            alert(data.name);
        }
    });  

 

跨域請求之JSONP

 

復制代碼代碼如下:

/**
 * JavaScript JSONP Library v0.3
 * Copyright (c) 2011 snandy
 * QQ群: 34580561
 * Date: 2011-04-26
 * 
 * 增加對請求失敗的處理,雖然這個功能用處不太大,但研究了各個瀏覽器下script的差異性
 * 1, IE6/7/8 支持script的onreadystatechange事件
 * 2, IE9/10 支持script的onload和onreadystatechange事件
 * 3, Firefox/Safari/Chrome/Opera支持script的onload事件
 * 4, IE6/7/8/Opera 不支持script的onerror事件; IE9/10/Firefox/Safari/Chrome支持
 * 5, Opera雖然不支持onreadystatechange事件,但其具有readyState屬性.這點甚是神奇
 * 6, 用IE9和IETester測試IE6/7/8,其readyState總為loading,loaded。沒出現過complete。
 * 
 * 最后的實現思路:
 * 1, IE9/Firefox/Safari/Chrome 成功回調使用onload事件,錯誤回調使用onerror事件
 * 2, Opera 成功回調也使用onload事件(它壓根不支持onreadystatechange),由于其不支持onerror,這里使用了延遲處理。
 *    即等待與成功回調success,success后標志位done置為true。failure則不會執行,否則執行。
 *    這里延遲的時間取值很有技巧,之前取2秒,在公司測試沒問題。但回家用3G無線網絡后發現即使所引用的js文件存在,但由于
 *    網速過慢,failure還是先執行了,后執行了success。所以這里取5秒是比較合理的。當然也不是絕對的。
 * 3, IE6/7/8 成功回調使用onreadystatechange事件,錯誤回調幾乎是很難實現的。也是最有技術含量的。
 *    參考了http://stackoverflow.com/questions/3483919/script-onload-onerror-with-iefor-lazy-loading-problems
 *    使用nextSibling,發現不能實現。
 *    令人惡心的是,即使請求的資源文件不存在。它的readyState也會經歷“loaded”狀態。這樣你就沒法區分請求成功或失敗。
 *    怕它了,最后使用前后臺一起協調的機制解決最后的這個難題。無論請求成功或失敗都讓其調用callback(true)。
 *    此時已經將區別成功與失敗的邏輯放到了callback中,如果后臺沒有返回jsonp則調用failure,否則調用success。
 *    
 * 
 * 接口
 * Sjax.load(url, {
 *    data      // 請求參數 (鍵值對字符串或js對象)
 *    success   // 請求成功回調函數
 *    failure   // 請求失敗回調函數
 *    scope     // 回調函數執行上下文
 *    timestamp // 是否加時間戳
 * });
 * 
 */
Sjax =
function(win){
    var ie678 = !-[1,],
        opera = win.opera,
        doc = win.document,
        head = doc.getElementsByTagName('head')[0],
        timeout = 3000,
        done = false;
    function _serialize(obj){
        var a = [], key, val;
        for(key in obj){
            val = obj[key];
            if(val.constructor == Array){
                for(var i=0,len=val.length;i<len;i++){
                    a.push(key + '=' + encodeURIComponent(val[i]));
                }
            }else{
                a.push(key + '=' + encodeURIComponent(val));
            }
        }
        return a.join('&');
    }
    function request(url,opt){
        function fn(){}
        var opt = opt || {},
        data = opt.data,
        success = opt.success || fn,
        failure = opt.failure || fn,
        scope = opt.scope || win,
        timestamp = opt.timestamp;
        if(data && typeof data == 'object'){
            data = _serialize(data);
        }       
        var script = doc.createElement('script');
        function callback(isSucc){
            if(isSucc){
                if(typeof jsonp != 'undefined'){// 賦值右邊的jsonp必須是后臺返回的,此變量為全局變量
                    done = true;
                    success.call(scope, jsonp);
                }else{
                    failure.call(scope);
                    //alert('warning: jsonp did not return.');
                }
            }else{
                failure.call(scope);
            }
            // Handle memory leak in IE
            script.onload = script.onerror = script.onreadystatechange = null;
            jsonp = undefined;
            if( head && script.parentNode ){
                head.removeChild(script);
            }
        }
        function fixOnerror(){
            setTimeout(function(){
                if(!done){
                    callback();
                }
            }, timeout);
        }
        if(ie678){
            script.onreadystatechange = function(){
                var readyState = this.readyState;
                if(!done && (readyState == 'loaded' || readyState == 'complete')){
                    callback(true);
                }
            }
            //fixOnerror();
        }else{
            script.onload = function(){
                callback(true);
            }
            script.onerror = function(){
                callback();
            }
            if(opera){
                fixOnerror();
            }
        }
        if(data){
            url += '?' + data;
        }
        if(timestamp){
            if(data){
                url += '&ts=';
            }else{
                url += '?ts='
            }
            url += (new Date).getTime();
        }
        script.src = url;
        head.insertBefore(script, head.firstChild);
    }
    return {load:request};
}(this);

 

調用方式如下:

 

復制代碼代碼如下:

 Sjax.load('jsonp66.js', {
        success : function(){alert(jsonp.name)},
        failure : function(){alert('error');}
  });  

 

千分位格式化

 

復制代碼代碼如下:

function toThousands(num) {
    var num = (num || 0).toString(), result = '';
    while (num.length > 3) {
        result = ',' + num.slice(-3) + result;
        num = num.slice(0, num.length - 3);
    }
    if (num) { result = num + result; }
    return result;
}  

 

以上就是本文給大家分享的javascript常用腳本了,希望大家能夠喜歡。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美电影在线| 精品国产乱码久久久久酒店| 68精品国产免费久久久久久婷婷| 国产精品最新在线观看| 国内精品久久久久影院 日本资源| 亚洲人成在线电影| 欧美大片在线影院| 国产精品香蕉av| 国产亚洲精品久久久久久牛牛| 91国内产香蕉| 日韩在线视频线视频免费网站| 日本精品va在线观看| 欧美性极品xxxx做受| 欧美性xxxx极品hd欧美风情| 亚洲电影天堂av| 欧美日韩亚洲精品一区二区三区| 欧美激情二区三区| 国产精品扒开腿做爽爽爽视频| 久久精品色欧美aⅴ一区二区| 欧美精品一二区| 综合网日日天干夜夜久久| 久久久成人精品视频| 欧美国产精品人人做人人爱| 欧美亚洲在线观看| 国产高清视频一区三区| 精品亚洲夜色av98在线观看| 欧美黑人一区二区三区| 91色精品视频在线| 性色av一区二区三区在线观看| 动漫精品一区二区| 国产精品永久免费| 国产精品高潮粉嫩av| 国产欧美日韩高清| 91在线色戒在线| 亚洲激情视频网| 国产午夜精品理论片a级探花| 日韩电影在线观看永久视频免费网站| 久久久久久国产精品久久| 久久99国产综合精品女同| 视频在线观看一区二区| 日本欧美一级片| 国产精品电影在线观看| 66m—66摸成人免费视频| 91国自产精品中文字幕亚洲| 国产日韩欧美电影在线观看| 亚洲女性裸体视频| 最好看的2019的中文字幕视频| 正在播放欧美一区| 久久精品91久久香蕉加勒比| 国产精品一区二区三区免费视频| 亚洲精品之草原avav久久| 久久亚洲国产成人| 成人乱色短篇合集| 91精品久久久久久久久久久久久久| 日韩精品黄色网| 久久精品99久久久香蕉| 欧美色图在线视频| 国产在线999| 久久成年人视频| 久青草国产97香蕉在线视频| 国产精品免费视频xxxx| 欧美日韩亚洲视频| 国产精品日韩在线| 日韩欧美中文第一页| 欧美老妇交乱视频| 国产福利精品av综合导导航| 美女黄色丝袜一区| 成人乱色短篇合集| 欧美日韩人人澡狠狠躁视频| 欧美亚洲在线观看| 欧美精品午夜视频| 成人黄色在线观看| 久久亚洲国产精品成人av秋霞| 欧美午夜xxx| 国产成人午夜视频网址| 国产精品美女久久| 日韩视频第一页| 亚洲最大av网站| 69国产精品成人在线播放| 亚洲jizzjizz日本少妇| 欧美日韩一区二区在线播放| 一区二区在线视频播放| 亚洲欧美日韩国产中文| 伊人伊人伊人久久| 久久精品国产久精国产思思| 久久久精品一区二区三区| 久久久久久com| 7777精品视频| 一区二区三区日韩在线| 国产成人aa精品一区在线播放| 国产日韩在线播放| 人人爽久久涩噜噜噜网站| 欧美成人黑人xx视频免费观看| 日韩精品视频在线观看网址| 亚洲图片欧美日产| 亚洲欧美在线免费| 亚洲欧美国产精品专区久久| 亚洲国产私拍精品国模在线观看| y97精品国产97久久久久久| 中文字幕久精品免费视频| 国产福利精品视频| 国产精品嫩草影院一区二区| 日韩av片永久免费网站| 91精品久久久久久久久久| 九色成人免费视频| 亚洲www永久成人夜色| 国产精品久久久久91| 日韩欧美综合在线视频| 这里只有精品视频| 日韩视频一区在线| 国产激情999| 久久电影一区二区| 91在线网站视频| 国内伊人久久久久久网站视频| 欧美二区在线播放| 成人综合网网址| 91中文字幕一区| 日韩欧美一区视频| 欧美性猛交xxxx富婆| 亚洲大尺度美女在线| 欧美激情一二三| 久久香蕉频线观| 国产精品扒开腿做| 欧美亚洲在线观看| 日本一欧美一欧美一亚洲视频| 亚洲网站视频福利| 亚洲国产一区二区三区在线观看| 亚洲乱码一区av黑人高潮| www欧美xxxx| 欧美精品www| 国产日韩欧美视频| 伊人成人开心激情综合网| 亚洲美女激情视频| 色播久久人人爽人人爽人人片视av| 精品一区二区三区电影| 亚洲欧洲国产伦综合| 久久精品视频在线播放| 亚洲亚裔videos黑人hd| 亚洲日本欧美日韩高观看| 亚洲第一区中文99精品| 亚洲欧美色图片| 久久久久久高潮国产精品视| 久久久女人电视剧免费播放下载| 国产亚洲欧美日韩美女| 国产精品国产福利国产秒拍| 亚洲自拍高清视频网站| 国产精品黄页免费高清在线观看| 国产精品69久久久久| 久久精品亚洲精品| 久久久亚洲精品视频| 久久免费精品日本久久中文字幕| 亚洲美女自拍视频| 国产精品扒开腿做爽爽爽男男| 久久精品国产免费观看| 亚洲成色999久久网站| 九色成人免费视频| 色狠狠久久aa北条麻妃| 色偷偷av一区二区三区| 麻豆国产va免费精品高清在线| 欧美日韩亚洲高清| 国产精品69av| 日韩美女免费视频| 久久五月天色综合| 日韩欧美在线视频日韩欧美在线视频|