最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript常用腳本匯總(一)

 更新時(shí)間:2015年03月04日 15:16:11   投稿:hebedich  
這篇文章主要介紹了JavaScript常用腳本匯總系列的第一篇,給大家分享的是jquery限制文本框只能輸入數(shù)字、封裝DOMContentLoaded事件、用原生JS對(duì)AJAX做簡(jiǎn)單封裝、跨域請(qǐng)求之JSONP、千分位格式化,有需要的小伙伴們參考下吧。

jquery限制文本框只能輸入數(shù)字

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

復(fù)制代碼 代碼如下:

$("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設(shè)置輸入法不可用

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

復(fù)制代碼 代碼如下:

$("#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設(shè)置輸入法不可用

上面代碼的作用是:只能輸入0-9的數(shù)字和小數(shù)點(diǎn)。

封裝DOMContentLoaded事件

復(fù)制代碼 代碼如下:

//保存domReady的事件隊(duì)列
    eventQueue = [];
    //判斷DOM是否加載完畢
    isReady = false;
    //判斷DOMReady是否綁定
    isBind = false;
    /*執(zhí)行domReady()
     *
     *@param    {function}
     *@execute  將事件處理程序壓入事件隊(duì)列,并綁定DOMContentLoaded
     *          如果DOM加載已經(jīng)完成,則立即執(zhí)行
     *@caller
     */
    function domReady(fn){
        if (isReady) {
            fn.call(window);
        }
        else{
            eventQueue.push(fn);
        };
        bindReady();
    };
    /*domReady事件綁定
     *
     *@param    null
     *@execute  現(xiàn)代瀏覽器通過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();
    };
    /*執(zhí)行事件隊(duì)列
     *
     *@param    null
     *@execute  循環(huán)執(zhí)行隊(duì)列中的事件處理程序
     *@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方法,不然函數(shù)不會(huì)執(zhí)行,
    //因?yàn)楫惒郊虞d的js下載之前,DOMContentLoaded已經(jīng)觸發(fā),addEventListener執(zhí)行時(shí)已經(jīng)監(jiān)聽不到了

用原生JS對(duì)AJAX做簡(jiǎn)單封裝

首先,我們需要xhr對(duì)象。這對(duì)我們來說不難,封裝成一個(gè)函數(shù)。

復(fù)制代碼 代碼如下:

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,請(qǐng)更換!");
        }
    }
    return xhr;
};   

然后,我們來寫核心函數(shù)。

復(fù)制代碼 代碼如下:

var ajax = function(conf) {
    // 初始化
    //type參數(shù),可選
    var type = conf.type;
    //url參數(shù),必填
    var url = conf.url;
    //data參數(shù)可選,只有在post請(qǐng)求時(shí)需要
    var data = conf.data;
    //datatype參數(shù)可選   
    var dataType = conf.dataType;
    //回調(diào)函數(shù)可選
    var success = conf.success;
    if (type == null){
        //type參數(shù)可選,默認(rèn)為get
        type = "get";
    }
    if (dataType == null){
        //dataType參數(shù)可選,默認(rèn)為text
        dataType = "text";
    }
    // 創(chuàng)建ajax引擎對(duì)象
    var xhr = createAjax();
    // 打開
    xhr.open(type, url, true);
    // 發(fā)送
    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字符串轉(zhuǎn)換為js對(duì)象 
                    success(eval("("+xhr.responseText+")"));
                }
            }
        }
    };
};      

最后,說明一下此函數(shù)的用法。

復(fù)制代碼 代碼如下:

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

跨域請(qǐng)求之JSONP

復(fù)制代碼 代碼如下:

/**
 * JavaScript JSONP Library v0.3
 * Copyright (c) 2011 snandy
 * QQ群: 34580561
 * Date: 2011-04-26
 *
 * 增加對(duì)請(qǐng)求失敗的處理,雖然這個(gè)功能用處不太大,但研究了各個(gè)瀏覽器下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屬性.這點(diǎn)甚是神奇
 * 6, 用IE9和IETester測(cè)試IE6/7/8,其readyState總為loading,loaded。沒出現(xiàn)過complete。
 *
 * 最后的實(shí)現(xiàn)思路:
 * 1, IE9/Firefox/Safari/Chrome 成功回調(diào)使用onload事件,錯(cuò)誤回調(diào)使用onerror事件
 * 2, Opera 成功回調(diào)也使用onload事件(它壓根不支持onreadystatechange),由于其不支持onerror,這里使用了延遲處理。
 *    即等待與成功回調(diào)success,success后標(biāo)志位done置為true。failure則不會(huì)執(zhí)行,否則執(zhí)行。
 *    這里延遲的時(shí)間取值很有技巧,之前取2秒,在公司測(cè)試沒問題。但回家用3G無線網(wǎng)絡(luò)后發(fā)現(xiàn)即使所引用的js文件存在,但由于
 *    網(wǎng)速過慢,failure還是先執(zhí)行了,后執(zhí)行了success。所以這里取5秒是比較合理的。當(dāng)然也不是絕對(duì)的。
 * 3, IE6/7/8 成功回調(diào)使用onreadystatechange事件,錯(cuò)誤回調(diào)幾乎是很難實(shí)現(xiàn)的。也是最有技術(shù)含量的。
 *    參考了http://stackoverflow.com/questions/3483919/script-onload-onerror-with-iefor-lazy-loading-problems
 *    使用nextSibling,發(fā)現(xiàn)不能實(shí)現(xiàn)。
 *    令人惡心的是,即使請(qǐng)求的資源文件不存在。它的readyState也會(huì)經(jīng)歷“l(fā)oaded”狀態(tài)。這樣你就沒法區(qū)分請(qǐng)求成功或失敗。
 *    怕它了,最后使用前后臺(tái)一起協(xié)調(diào)的機(jī)制解決最后的這個(gè)難題。無論請(qǐng)求成功或失敗都讓其調(diào)用callback(true)。
 *    此時(shí)已經(jīng)將區(qū)別成功與失敗的邏輯放到了callback中,如果后臺(tái)沒有返回jsonp則調(diào)用failure,否則調(diào)用success。
 *   
 *
 * 接口
 * Sjax.load(url, {
 *    data      // 請(qǐng)求參數(shù) (鍵值對(duì)字符串或js對(duì)象)
 *    success   // 請(qǐng)求成功回調(diào)函數(shù)
 *    failure   // 請(qǐng)求失敗回調(diào)函數(shù)
 *    scope     // 回調(diào)函數(shù)執(zhí)行上下文
 *    timestamp // 是否加時(shí)間戳
 * });
 *
 */
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必須是后臺(tái)返回的,此變量為全局變量
                    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);

調(diào)用方式如下:

復(fù)制代碼 代碼如下:

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

千分位格式化

復(fù)制代碼 代碼如下:

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常用腳本了,希望大家能夠喜歡。

相關(guān)文章

  • 使用Fuse.js實(shí)現(xiàn)高效的模糊搜索功能

    使用Fuse.js實(shí)現(xiàn)高效的模糊搜索功能

    在現(xiàn)代?Web?應(yīng)用程序中,實(shí)現(xiàn)高效的搜索功能是至關(guān)重要的,Fuse.js?是一個(gè)強(qiáng)大的?JavaScript?庫(kù),它提供了靈活的模糊搜索和文本匹配功能,使您能夠輕松實(shí)現(xiàn)出色的搜索體驗(yàn),文中代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • js猜數(shù)字小游戲的簡(jiǎn)單實(shí)現(xiàn)代碼

    js猜數(shù)字小游戲的簡(jiǎn)單實(shí)現(xiàn)代碼

    這篇文章介紹了js猜數(shù)字小游戲的簡(jiǎn)單實(shí)現(xiàn)代碼,很好玩的游戲哦,可以看看你的智商 是否驚人額
    2013-07-07
  • js 函數(shù)式編程學(xué)習(xí)筆記

    js 函數(shù)式編程學(xué)習(xí)筆記

    這兩天看書看到了函數(shù)式編程那節(jié),感覺學(xué)到了挺多東西,之前看別人代碼都寫的挺漂亮,現(xiàn)在我寫的代碼是有點(diǎn)亂,所以還是要學(xué)習(xí)下別人的編程模式
    2017-03-03
  • bootstrap paginator分頁(yè)前后臺(tái)用法示例

    bootstrap paginator分頁(yè)前后臺(tái)用法示例

    這篇文章主要為大家詳細(xì)介紹了bootstrap paginator分頁(yè)前后臺(tái)用法示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 詳解JavaScript的另類寫法

    詳解JavaScript的另類寫法

    這篇文章主要介紹了詳解JavaScript的另類寫法的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • javascript模擬的Ping效果代碼 (Web Ping)

    javascript模擬的Ping效果代碼 (Web Ping)

    JS雖然發(fā)送不了真正Ping的ICMP數(shù)據(jù)包,但Ping的本質(zhì)仍然是請(qǐng)求/回復(fù)的時(shí)間差,HTTP自然可以實(shí)現(xiàn)此功能.
    2011-03-03
  • 圖片懶加載插件實(shí)例分享(含解析)

    圖片懶加載插件實(shí)例分享(含解析)

    本文主要介紹了圖片懶加載插件,函數(shù)節(jié)流的應(yīng)用以及函數(shù)節(jié)流具體的好處、常用的場(chǎng)景。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 給echarts圖表線條、數(shù)據(jù)點(diǎn)和區(qū)域設(shè)置顏色示例代碼

    給echarts圖表線條、數(shù)據(jù)點(diǎn)和區(qū)域設(shè)置顏色示例代碼

    在ECharts中設(shè)置顏色可以通過多種方式實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于給echarts圖表線條、數(shù)據(jù)點(diǎn)和區(qū)域設(shè)置顏色的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • 微信小程序模擬cookie的實(shí)現(xiàn)

    微信小程序模擬cookie的實(shí)現(xiàn)

    本篇文章主要介紹了微信小程序模擬 cookie的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 輕松實(shí)現(xiàn)JavaScript圖片切換

    輕松實(shí)現(xiàn)JavaScript圖片切換

    這篇文章主要幫助大家輕松實(shí)現(xiàn)JavaScript圖片切換,內(nèi)容很精簡(jiǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評(píng)論

安岳县| 湘西| 报价| 浙江省| 沂源县| 秭归县| 阳春市| 关岭| 美姑县| 理塘县| 获嘉县| 昆山市| 讷河市| 安龙县| 汝南县| 伊金霍洛旗| 宣威市| 柳河县| 富宁县| 治县。| 平泉县| 广水市| 祁连县| 五莲县| 三原县| 海阳市| 灵寿县| 万载县| 富蕴县| 五原县| 横峰县| 呼图壁县| 恩施市| 正安县| 泊头市| 利津县| 深圳市| 道孚县| 柞水县| 静乐县| 东光县|