JavaScript常用脚本汇总(一)


Posted in Javascript onMarch 04, 2015

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常用脚本了,希望大家能够喜欢。

Javascript 相关文章推荐
html向js方法传递参数具体实现
Aug 08 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
js控制文本框输入的字符类型方法汇总
Jun 19 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 Javascript
微信小程序与webview交互实现支付功能
Jun 07 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
Oct 22 Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
JS+CSS实现Div弹出窗口同时背景变暗的方法
Mar 04 #Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 #Javascript
JavaScript中的关联数组问题
Mar 04 #Javascript
JavaScript中常见获取元素的方法汇总
Mar 04 #Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 #Javascript
JavaScript设置获取和设置属性的方法
Mar 04 #Javascript
深入理解JavaScript系列(50):Function模式(下篇)
Mar 04 #Javascript
You might like
php 获取SWF动画截图示例代码
2014/02/10 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
PHP实现百度人脸识别
2019/05/06 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
搭建vue开发环境
2018/07/19 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
决定成败的关键——创业计划书
2014/01/24 职场文书
企业文化理念标语
2014/06/10 职场文书
MySQL常用慢查询分析工具详解
2022/08/14 MySQL