资讯专栏INFORMATION COLUMN

JavaScript常用脚本集锦1

ygyooo / 3314人阅读

摘要:初始化参数可选参数,必填参数可选,只有在请求时需要参数可选回调函数可选参数可选,默认为参数可选,默认为创建引擎对象打开发送普通文本接收文档将字符串转换为对象最后,说明一下此函数的用法。即等待与成功回调,后标志位置为。

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
 * Blog: http://www.cnblogs.com/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

调用方式如下:

 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封装DOMContentLoaded事件
用原生JS对AJAX做简单封装
跨域请求之JSONP 三 - snandy - 博客园
从千分位格式化谈JS性能优化

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85418.html

相关文章

  • JavaScript常用脚本集锦2

    摘要:把中的伪数组转换为真数组在中,函数中的隐藏变量和用获得的元素集合都不是真正的数组,不能使用等方法,在有这种需要的时候只能先转换为真正的数组。检测元素是否支持某个属性代码用法创建和使用命名空间使用方式 把JavaScript中的伪数组转换为真数组 在 JavaScript 中, 函数中的隐藏变量 arguments 和用 getElementsByTagName 获得的元素集合(Nod...

    xialong 评论0 收藏0
  • JavaScript常用脚本集锦5

    摘要:代码来源一些常用的操作方法介绍查找相关元素的前一个兄弟元素的方法。查找元素指定层级的父元素。 DOM操作的增强版功能函数 /** * 将一个DOM节点、HTML字符串混合型参数 * 转化为原生的DOM节点数组 * * */ function checkElem(a) { var r = []; if (a.constructor != Array) { ...

    joywek 评论0 收藏0
  • JavaScript常用脚本集锦6

    摘要:它会指出一个类是继承自另一个类的。测试测试代码来源页面倒计时的一段运用倒计时的一段脚本。截止日期符合日期格式,比如等有效日期。截止的天数小时分钟秒数组成的对象。 清楚节点内的空格 function cleanWhitespace(element) { //如果不提供参数,则处理整个HTML文档 element = element || document; //...

    Acceml 评论0 收藏0
  • JavaScript常用脚本集锦3

    通过数组,拓展字符串拼接容易导致性能的问题 function StringBuffer() { this.__strings__ = new Array(); } StringBuffer.prototype.append = function (str) { this.__strings__.push(str); return this; } StringBuffer....

    dack 评论0 收藏0
  • JavaScript常用脚本集锦8

    摘要:进制为代码来源通过标签解析通过标签解析标签参数是字符串,解析的目标通过测试创建一个标签将赋值给标签的属性。协议主机名称端口查询字符串查询参数文件名哈希参数路径相对路径路径片段代码来源 图片预加载 // 更新: // 05.27: 1、保证回调执行顺序:error > ready > load;2、回调函数this指向img本身 // 04-02: 1、增加图片完全加载后的回调 2、提...

    blankyao 评论0 收藏0
  • JavaScript常用脚本集锦4

    摘要:一些元素位置设置的通用方法查找元素的左端位置代码依赖来自查找元素的顶端位置设置元素和位置与当前位置无关的一对函数设置元素水平的函数设置元素垂直位置的函数在元素的水平位置上增加像素距离的函数在元素的垂直位置上增加像素距离的函数代码来源元素相对 一些元素位置设置的通用方法 /** * 查找元素的左端位置, * 代码依赖:getStyle来自 https://gist.github.c...

    yeooo 评论0 收藏0

发表评论

0条评论

ygyooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<