摘要:初始化參數(shù)可選參數(shù),必填參數(shù)可選,只有在請(qǐng)求時(shí)需要參數(shù)可選回調(diào)函數(shù)可選參數(shù)可選,默認(rèn)為參數(shù)可選,默認(rèn)為創(chuàng)建引擎對(duì)象打開發(fā)送普通文本接收文檔將字符串轉(zhuǎn)換為對(duì)象最后,說明一下此函數(shù)的用法。即等待與成功回調(diào),后標(biāo)志位置為。
jquery限制文本框只能輸入數(shù)字
jquery限制文本框只能輸入數(shù)字,兼容IE、chrome、FF(表現(xiàn)效果不一樣),示例代碼如下:
$("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ù)。
$("#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事件//保存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ù)。
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ù)。
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ù)的用法。
ajax({ type:"post", url:"test.jsp", data:"name=dipoo&info=good", dataType:"json", success:function(data){ alert(data.name); } });跨域請(qǐng)求之JSONP
/** * JavaScript JSONP Library v0.3 * Copyright (c) 2011 snandy * Blog: http://www.cnblogs.com/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調(diào)用方式如下:
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對(duì)AJAX做簡(jiǎn)單封裝
跨域請(qǐng)求之JSONP 三 - snandy - 博客園
從千分位格式化談JS性能優(yōu)化
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85418.html
摘要:把中的偽數(shù)組轉(zhuǎn)換為真數(shù)組在中,函數(shù)中的隱藏變量和用獲得的元素集合都不是真正的數(shù)組,不能使用等方法,在有這種需要的時(shí)候只能先轉(zhuǎn)換為真正的數(shù)組。檢測(cè)元素是否支持某個(gè)屬性代碼用法創(chuàng)建和使用命名空間使用方式 把JavaScript中的偽數(shù)組轉(zhuǎn)換為真數(shù)組 在 JavaScript 中, 函數(shù)中的隱藏變量 arguments 和用 getElementsByTagName 獲得的元素集合(Nod...
摘要:代碼來源一些常用的操作方法介紹查找相關(guān)元素的前一個(gè)兄弟元素的方法。查找元素指定層級(jí)的父元素。 DOM操作的增強(qiáng)版功能函數(shù) /** * 將一個(gè)DOM節(jié)點(diǎn)、HTML字符串混合型參數(shù) * 轉(zhuǎn)化為原生的DOM節(jié)點(diǎn)數(shù)組 * * */ function checkElem(a) { var r = []; if (a.constructor != Array) { ...
摘要:它會(huì)指出一個(gè)類是繼承自另一個(gè)類的。測(cè)試測(cè)試代碼來源頁面倒計(jì)時(shí)的一段運(yùn)用倒計(jì)時(shí)的一段腳本。截止日期符合日期格式,比如等有效日期。截止的天數(shù)小時(shí)分鐘秒數(shù)組成的對(duì)象。 清楚節(jié)點(diǎn)內(nèi)的空格 function cleanWhitespace(element) { //如果不提供參數(shù),則處理整個(gè)HTML文檔 element = element || document; //...
通過數(shù)組,拓展字符串拼接容易導(dǎo)致性能的問題 function StringBuffer() { this.__strings__ = new Array(); } StringBuffer.prototype.append = function (str) { this.__strings__.push(str); return this; } StringBuffer....
摘要:進(jìn)制為代碼來源通過標(biāo)簽解析通過標(biāo)簽解析標(biāo)簽參數(shù)是字符串,解析的目標(biāo)通過測(cè)試創(chuàng)建一個(gè)標(biāo)簽將賦值給標(biāo)簽的屬性。協(xié)議主機(jī)名稱端口查詢字符串查詢參數(shù)文件名哈希參數(shù)路徑相對(duì)路徑路徑片段代碼來源 圖片預(yù)加載 // 更新: // 05.27: 1、保證回調(diào)執(zhí)行順序:error > ready > load;2、回調(diào)函數(shù)this指向img本身 // 04-02: 1、增加圖片完全加載后的回調(diào) 2、提...
摘要:一些元素位置設(shè)置的通用方法查找元素的左端位置代碼依賴來自查找元素的頂端位置設(shè)置元素和位置與當(dāng)前位置無關(guān)的一對(duì)函數(shù)設(shè)置元素水平的函數(shù)設(shè)置元素垂直位置的函數(shù)在元素的水平位置上增加像素距離的函數(shù)在元素的垂直位置上增加像素距離的函數(shù)代碼來源元素相對(duì) 一些元素位置設(shè)置的通用方法 /** * 查找元素的左端位置, * 代碼依賴:getStyle來自 https://gist.github.c...
閱讀 3821·2023-04-25 18:41
閱讀 1282·2021-11-11 16:55
閱讀 1910·2021-09-22 15:54
閱讀 3140·2021-09-22 15:51
閱讀 3607·2019-08-30 15:55
閱讀 2004·2019-08-30 14:19
閱讀 1372·2019-08-29 10:57
閱讀 1771·2019-08-29 10:56