JavaScript常用脚本汇总(一)_Javascript教程-查字典教程网
JavaScript常用脚本汇总(一)
JavaScript常用脚本汇总(一)
发布时间:2016-12-30 来源:查字典编辑
摘要:jquery限制文本框只能输入数字jquery限制文本框只能输入数字,兼容IE、chrome、FF(表现效果不一样),示例代码如下:复制代码...

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教程学习
    热门Javascript教程学习
    编程开发子分类