js 自己容易搞混的笔记查询
相似的操作
var str2 = "0123456789"; console.log(str2.slice(4,7)); //------------"456" var arrs=[0,1,2,3,4,5,6,7,8,9]; console.log(arrs.slice(4,7)); //------------"[4,5,6]"
String 字符串操作整理查询
var test = 'hello world'; console.log(test.slice(4,7)); //o w console.log(test.substring(4,7)); //o w console.log(test.substr(4,7)); //o world //这里有个需要注意的地方就是:substring是以两个参数中较小一个作为起始位置,较大的参数作为结束位置。 console.log(test.substring(7,4)); //o w //参数 描述 //start 必需。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。 //length 可选。在返回的子字符串中应包括的字符个数。 //说明 //如果 length 为 0 或负数,将返回一个空字符串。 //如果没有指定该参数,则子字符串将延续到stringObject的最后。 var str = "0123456789"; console.log(str.substring(0));------------"0123456789" console.log(str.substring(5));------------"56789" console.log(str.substring(10));-----------"" console.log(str.substring(12));-----------"" console.log(str.substring(-5));-----------"0123456789" console.log(str.substring(-10));----------"0123456789" console.log(str.substring(-12));----------"0123456789" console.log(str.substring(0,5));----------"01234" console.log(str.substring(0,10));---------"0123456789" console.log(str.substring(0,12));---------"0123456789" console.log(str.substring(2,0));----------"01" console.log(str.substring(2,2));----------"" console.log(str.substring(2,5));----------"234" console.log(str.substring(2,12));---------"23456789" console.log(str.substring(2,-2));---------"01" console.log(str.substring(-1,5));---------"01234" console.log(str.substring(-1,-5));--------"" console.log(str.substr(0));---------------"0123456789" console.log(str.substr(5));---------------"56789" console.log(str.substr(10));--------------"" console.log(str.substr(12));--------------"" console.log(str.substr(-5));--------------"0123456789" console.log(str.substr(-10));-------------"0123456789" console.log(str.substr(-12));-------------"0123456789" console.log(str.substr(0,5));-------------"01234" console.log(str.substr(0,10));------------"0123456789" console.log(str.substr(0,12));------------"0123456789" console.log(str.substr(2,0));-------------"" console.log(str.substr(2,2));-------------"23" console.log(str.substr(2,5));-------------"23456" console.log(str.substr(2,12));------------"23456789" console.log(str.substr(2,-2));------------"" console.log(str.substr(-1,5));------------"01234" console.log(str.substr(-1,-5));-----------""
Array 数组操作整理
<script type="text/javascript"> //JS Array.slice 截取数组 //在JavaScript中,Array对象的slice(start[,end])方法返回数组从下标[start,end)的部分(不包含下标为end的元素)如果没有指定end参数,则从start开始到数组结尾的部分,slice()方法不改变原数组,如果要删除数组的一部分,可以使用splice()方法。 //参数: //(1)start:开始截取的数组下标,如果start是负数,表明从数组尾部开始计算。 //(2)end:结束截取的数组下标,如果end是负数,表明从数组尾部开始计算。 //例1: var arr = [1,2,3,4,5,6,7,8,9]; // [0,1,2,3,4,5,6,7,8] // [-10,-9,-8,-7,-6,-5,-4,-3,-2,-1] document.writeln(arr.slice(5)); // 输出:6,7,8,9 document.writeln(arr.slice(-5)); // 输出:5,6,7,8,9 document.writeln(arr.slice(0,3)); // 输出:1,2,3 document.writeln(arr.slice(1,2)); // 输出:2 document.writeln(arr.slice(3,-2)); // 输出:4,5,6,7 document.writeln(arr.slice(1,9999)); // 输出:2,3,4,5,6,7,8,9 //================================================================================================== //JS Array.splice(start,delete_count,value,...) 插入、删除、替换数组 //参数: //(1)start:开始插入和(或)删除的数组元素的下标。 //(2)delete_count:结束截取的数组下标,如果end是负数,表明从数组尾部开始计算。 //(3)value,...:要插入数组的元素。 //返回:如果从数组中删除了元素,则返回的是被删除的元素的数组 // //例1: document.write("<hr>"); // var arr = [1,2,3,4,5,6,7,8,9]; document.writeln("arr=" + arr); // 输出:arr=1,2,3,4,5,6,7,8,9 document.writeln("arr.splice(5)=" + arr.splice(5)); // 输出:arr.splice(5)=6,7,8,9 document.writeln("arr=" + arr); // 输出:arr=1,2,3,4,5 document.write("<br>"); // var arr = [1,2,3,4,5,6,7,8,9]; document.writeln("arr=" + arr); // 输出:arr=1,2,3,4,5,6,7,8,9 document.writeln("arr.splice(5,1,99,100)=" + arr.splice(5,1,99,100)); // 输出:arr.splice(5,1,99,100)=6 document.writeln("arr=" + arr); // 输出:arr=1,2,3,4,5,99,100,7,8,9 document.write("<br>"); </script>
arrayObject.slice(start,end) 返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
shift:从数组中把第一个元素删除,并返回这个元素的值。
unshift: 在数组的开头添加一个或更多元素,并返回新的长度
push:在数组的中末尾添加元素,并返回新的长度
pop:从数组中把最后一个元素删除,并返回这个元素的值。
Array的push与unshift方法都能给当前数组添加元素,不同的是,push是在末尾添加,而unshift则是在开头添加,从原理就可以知道,unshift的效率是较低的。原因是,它每添加一个元素,都要把现有元素往下移一个位置。
变量 提升 作用域
var msg1='This is message 1'; var msg3='This is message 3'; function otherFunction() { msg2='This is message 2'; //不使用var关键字,其实也是定义一个全局变量 var msg3='Message 3'; var ms4='Message 4'; alert(msg1); //This is message 1 (函数内当然可以访问到外面定义的全局变量,再深的函数嵌套一样能正确获到这个全局变量,这是JavaScript闭包的其中一种体现) alert(msg3); //Message 3 (局部变量msg3) alert(window.msg3); //This is message 3 (使用window前缀访问同名的全局变量msg3) alert(this.msg3); //This is message 3 (因为otherFunction ()定义在一个全局的环境中,此时otherFunction ()的this也是指向window,所有你看到window. msg3是等于this. msg3的) } otherFunction(); //otherFunction函数外面定义的msg1和里面定义的msg2依然是全局变量 alert(window.msg1); //This is message 1 alert(window.msg2); //This is message 2 alert(window.ms4); // underfind 外部不可以访问内部
json字符转
JSON.stringify(value [, replacer] [, space])
- value:是必选字段。就是你输入的对象,比如数组,类等。
- replacer:这个是可选的。它又分为2种方式,一种是数组,第二种是方法。
情况一:replacer为数组时,通过后面的实验可以知道,它是和第一个参数value有关系的。一般来说,系列化后的结果是通过键值对来进行表示的。 所以,如果此时第二个参数的值在第一个存在,那么就以第二个参数的值做key,第一个参数的值为value进行表示,如果不存在,就忽略。
情况二:replacer为方法时,那很简单,就是说把系列化后的每一个对象(记住是每一个)传进方法里面进行处理。
- space:就是用什么来做分隔符的。
1)如果省略的话,那么显示出来的值就没有分隔符,直接输出来 。
2)如果是一个数字的话,那么它就定义缩进几个字符,当然如果大于10 ,则默认为10,因为最大值为10。
3)如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。
4)如果仅仅是字符串,就在每行输出值的时候把这些字符串附加上去。当然,最大长度也是10个字符。
var arr = [1,2,3,4];
console.log(arr.toString()); // 1,2,3,4
alert(JSON.stringify(arr));
console.log(JSON.stringify(arr)); // [1,2,3,4]
arr.toString()是将数组转化成字符串,因此不带 [ ]
而JSON.stringify(arr)是从一个对象解析出JSON字符串,是带[]的
另外JSON.parse() 是用于从一个字符串中解析出json对象
var str = '{"name":"huangxiaojian","age":"23"}'
结果:
JSON.parse(str)
- age: "23"
- name: "huangxiaojian"
- __proto__: Object
获取滚动条高度
document.getElementById("element").addEventListener("click",function(){ var scrollTop1 = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop; var scrollTop2 = window.scrollY||document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; console.log('scrollTop1'+scrollTop1) console.log('scrollTop2'+scrollTop2) });
原生js append操作
var bes=document.getElementById("appends"), var strs= "<li>234</li>"; bes.insertAdjacentHTML('beforebegin', strs);
普通浅拷贝
function extend(a, b){ for(var key in b) if(b.hasOwnProperty(key)) a[key] = b[key]; return a; }
extend({}, default, config)
//extend({}, default, config) //A more robust solution that mimics jQuery's functionality would be as follows: function extend(){ for(var i=1; i<arguments.length; i++) for(var key in arguments[i]) if(arguments[i].hasOwnProperty(key)) arguments[0][key] = arguments[i][key]; return arguments[0]; }
http://stackoverflow.com/questions/11197247/javascript-equivalent-of-jquerys-extend-method?rq=1
for 循环 while
var cars=["BMW","Volvo","Saab","Ford"]; for (var i=cars.length;i--;) { console.log(cars[i] + "<br>"); } var cars0=["BMW0","Volvo0","Saab0","Ford0"]; for (var i=0;i<cars0.length;i++) { console.log(cars0[i] + "<br>"); } var cars=["BMW1","Volvo1","Saab1","Ford1"]; var i=0; for (;cars[i];) { console.log(cars[i] + "<br>"); i++; } var cars2=["BMW2","Volvo2","Saab2","Ford2"]; var i=0; while (cars2[i]) { console.log(cars2[i] + "<br>"); i++; } var cars3=["BMW3","Volvo3","Saab3","Ford3"]; var i=cars3.length; while (i--) { console.log(cars3[i] + "<br>"); }
map和forEach 区别
- map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;
- 区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);
- 不管是forEach还是map 都支持第二个参数值,第二个参数的意思是把匿名回调函数中的this进行修改。
var ary = [12,23,24,42,1]; var res = ary.map(function (item,index,input) { return item*10; }) console.log(res);//-->[120,230,240,420,10]; console.log(ary);//-->[12,23,24,42,1];
匿名函数立即执行
//五大类,20几种写法 //第一类 //最常见的一种 ( function(w) { alert(w.location.href+","+11); }(window)); [ function(w) { alert(w.location.href+","+11); }(window) ]; //第二类 ~ function(w) { alert(w.location.href+","+11); }(window); ! function(w) { alert(w.location.href+","+11); }(window); + function(w) { alert(w.location.href+","+11); }(window); - function(w) { alert(w.location.href+","+11); }(window); //第三类 delete function(w) { alert(w.location.href+","+11); }(window); typeof function(w) { alert(w.location.href+","+11); }(window); void function(w) { alert(w.location.href+","+11); }(window); new function(w) { alert(w.location.href+","+11); }(window); new function() { alert(window.location.href+","+11); }; //第四类 var f = function(w) { alert(w.location.href+","+11); }(window); //第五类 1, function() { alert(window.location.href+","+11); }(); 1 ^ function() { alert(window.location.href+","+11); }(); 1 > function() { alert(window.location.href+","+11); }(); 1 < function() { alert(window.location.href+","+11); }(); 1 / function() { alert(window.location.href+","+11); }(); 1 * function() { alert(window.location.href+","+11); }(); 1 | function() { alert(window.location.href+","+11); }(); 1 % function() { alert(window.location.href+","+11); }(); 1 & function() { alert(window.location.href+","+11); }();
for 循环 闭包的写法
<center> <p> <img src="../images/l1.jpg" id="img1"/> <br /> <button id="a1">设置图像的 width 和 height 属性</button> </p> <p> <img src="../images/l2.jpg" id="img2"/> <br /> <button id="a2">设置图像的 width 和 height 属性</button> </p> <p> <img src="../images/l1.jpg" id="img3"/> <br /> <button id="a3">设置图像的 width 和 height 属性</button> </p> </center>
for (var i=0;i<4 ;i++ ){ //闭包写法1 i 以函数参数形式传递给内层函数 //alert(i); (function(i){ $("#a"+i).click(function(){ //alert("#a"+i); $("#img"+i).attr({width:"50",height:"80"}); }); })(i) //闭包 }//for 循环结束 for (var i=0;i<4 ;i++ ){ //闭包写法2 i 以局部变量 形式传递给内层函数 //alert(i); (function(){ var temp=i; //alert(temp);// 0 1 2 3 $("#a"+temp).click(function(){ // alert("#a"+temp); $("#img"+temp).attr({width:"50",height:"80"}); }); })() //闭包 }//for 循环结束 for (var i=0;i<4 ;i++ ){ //闭包写法3 返回一个函数作为响应事件(注意与1的细微区别) $("#a"+i).click(function(i){ return function(){ //alert("#a"+i); $("#img"+i).attr({width:"50",height:"80"}); } }(i) ) }//for 循环结束 for (var i=0;i<4 ;i++ ){ //with 写法 //alert(i); with({b:i}) //with() 括号之后不能有分号 将作用域设定为with中的对象 ,类似中转站 $("#a"+b).click(function(){ //alert("#a"+i); $("#img"+b).attr({width:"50",height:"80"}); }); }//for 循环结束 (function fa(){ //fa必须在 for 里面 闭包变量的值 fb取到的值 必须在 fa 里循环出来 不然取不到 var i=0; //alert(i); function fb(){ for (i=0;i<4 ;i++ ){ $("#a"+i).click(function(){ alert("#a"+i);}); }//for 循环结束 } return fb(); })() for (var i=0;i<4 ;i++ ){ //用Function实现,实际上每产生一个函数实例就会产生一个闭包 但是click事件无效 $("#a"+i).click( new function(){ //alert("#a"+i); $("#img"+i).attr({width:"50",height:"80"}); }); }//for 循环结束 for (var i=0;i<4 ;i++ ){ //用 点击事件 on 事件 里面的 data 取值 值 是取到了 一下子全部用完了 和上面 new function() 差不多 一下子创建 $("#a"+i).on("click",{'value':i},function(v){ alert("#a"+i); //都是 #a4 //闭包会多循环一次 $("#img"+v.data["value"]).attr({width:"50",height:"80"}); }); }//for 循环结束
//例如,以下代码会输出5次,结果都是5,那么如何输出0、1、2、3、4? for(var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } //利用闭包的原理实现,代码如下: for(var i = 0; i < 5; i++) { (function(e) { setTimeout(function() { console.log('传进来的是'+e); }, 1000); })(i); }
命名规范
按照类型规划: s:表示字符串。例如:sName,sHtml; n:表示数字。例如:nPage,nTotal; b:表示逻辑。例如:bChecked,bHasLogin; a:表示数组。例如:aList,aGroup; r:表示正则表达式。例如:rDomain,rEmail; f:表示函数。例如:fGetHtml,fInit; o:表示以上未涉及到的其他对象,例如:oButton,oDate; g:表示全局变量,例如:gUserName,gLoginTime;
var isJson = function(obj){ var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length return isjson; } // var t = isJson({"name":"boy"}); // alert(t); var isEmptyObject=function(obj){ for(var n in obj){return false} return true; }
js错误类型
Error对象及其衍生对象
Error对象有两个最基本的属性:
name:错误名称
message:错误提示信息
除了Error对象,JavaScript还定义了其他6种错误,即存在Error的6个衍生对象
EvalError:执行代码时发生的错误
RangeError:当一个数值型变量或参数超出有效范围时发生的错误
ReferenceError:引用一个不存在的变量时发生的错误
SyntaxError:解析代码时发生的语法错误
TypeError:变量或参数的类型无效时发生的错误
URIError:向encodeURI() 或者 decodeURI() 传入无效参数时发生的错误
微信demo备份
/* * 注意: * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 * 3. 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html * * 如有问题请通过以下渠道反馈: * 邮箱地址:weixin-open@qq.com * 邮件主题:【微信JS-SDK反馈】具体问题 * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 */ wx.ready(function () { // 1 判断当前版本是否支持指定 JS 接口,支持批量判断 document.querySelector('#checkJsApi').onclick = function () { wx.checkJsApi({ jsApiList: [ 'getNetworkType', 'previewImage' ], success: function (res) { alert(JSON.stringify(res)); } }); }; // 2. 分享接口 // 2.1 监听“分享给朋友”,按钮点击、自定义分享内容及分享结果接口 document.querySelector('#onMenuShareAppMessage').onclick = function () { wx.onMenuShareAppMessage({ title: '互联网之子', desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger: function (res) { // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 alert('用户点击发送给朋友'); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); alert('已注册获取“发送给朋友”状态事件'); }; // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口 document.querySelector('#onMenuShareTimeline').onclick = function () { wx.onMenuShareTimeline({ title: '互联网之子', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger: function (res) { // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 alert('用户点击分享到朋友圈'); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); alert('已注册获取“分享到朋友圈”状态事件'); }; // 2.3 监听“分享到QQ”按钮点击、自定义分享内容及分享结果接口 document.querySelector('#onMenuShareQQ').onclick = function () { wx.onMenuShareQQ({ title: '互联网之子', desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://img3.douban.com/view/movie_poster_cover/spst/public/p2166127561.jpg', trigger: function (res) { alert('用户点击分享到QQ'); }, complete: function (res) { alert(JSON.stringify(res)); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); alert('已注册获取“分享到 QQ”状态事件'); }; // 2.4 监听“分享到微博”按钮点击、自定义分享内容及分享结果接口 document.querySelector('#onMenuShareWeibo').onclick = function () { wx.onMenuShareWeibo({ title: '互联网之子', desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://img3.douban.com/view/movie_poster_cover/spst/public/p2166127561.jpg', trigger: function (res) { alert('用户点击分享到微博'); }, complete: function (res) { alert(JSON.stringify(res)); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); alert('已注册获取“分享到微博”状态事件'); }; // 2.5 监听“分享到QZone”按钮点击、自定义分享内容及分享接口 document.querySelector('#onMenuShareQZone').onclick = function () { wx.onMenuShareQZone({ title: '互联网之子', desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://img3.douban.com/view/movie_poster_cover/spst/public/p2166127561.jpg', trigger: function (res) { alert('用户点击分享到QZone'); }, complete: function (res) { alert(JSON.stringify(res)); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); alert('已注册获取“分享到QZone”状态事件'); }; // 3 智能接口 var voice = { localId: '', serverId: '' }; // 3.1 识别音频并返回识别结果 document.querySelector('#translateVoice').onclick = function () { if (voice.localId == '') { alert('请先使用 startRecord 接口录制一段声音'); return; } wx.translateVoice({ localId: voice.localId, complete: function (res) { if (res.hasOwnProperty('translateResult')) { alert('识别结果:' + res.translateResult); } else { alert('无法识别'); } } }); }; // 4 音频接口 // 4.2 开始录音 document.querySelector('#startRecord').onclick = function () { wx.startRecord({ cancel: function () { alert('用户拒绝授权录音'); } }); }; // 4.3 停止录音 document.querySelector('#stopRecord').onclick = function () { wx.stopRecord({ success: function (res) { voice.localId = res.localId; }, fail: function (res) { alert(JSON.stringify(res)); } }); }; // 4.4 监听录音自动停止 wx.onVoiceRecordEnd({ complete: function (res) { voice.localId = res.localId; alert('录音时间已超过一分钟'); } }); // 4.5 播放音频 document.querySelector('#playVoice').onclick = function () { if (voice.localId == '') { alert('请先使用 startRecord 接口录制一段声音'); return; } wx.playVoice({ localId: voice.localId }); }; // 4.6 暂停播放音频 document.querySelector('#pauseVoice').onclick = function () { wx.pauseVoice({ localId: voice.localId }); }; // 4.7 停止播放音频 document.querySelector('#stopVoice').onclick = function () { wx.stopVoice({ localId: voice.localId }); }; // 4.8 监听录音播放停止 wx.onVoicePlayEnd({ complete: function (res) { alert('录音(' + res.localId + ')播放结束'); } }); // 4.8 上传语音 document.querySelector('#uploadVoice').onclick = function () { if (voice.localId == '') { alert('请先使用 startRecord 接口录制一段声音'); return; } wx.uploadVoice({ localId: voice.localId, success: function (res) { alert('上传语音成功,serverId 为' + res.serverId); voice.serverId = res.serverId; } }); }; // 4.9 下载语音 document.querySelector('#downloadVoice').onclick = function () { if (voice.serverId == '') { alert('请先使用 uploadVoice 上传声音'); return; } wx.downloadVoice({ serverId: voice.serverId, success: function (res) { alert('下载语音成功,localId 为' + res.localId); voice.localId = res.localId; } }); }; // 5 图片接口 // 5.1 拍照、本地选图 var images = { localId: [], serverId: [] }; document.querySelector('#chooseImage').onclick = function () { wx.chooseImage({ success: function (res) { images.localId = res.localIds; alert('已选择 ' + res.localIds.length + ' 张图片'); } }); }; // 5.2 图片预览 document.querySelector('#previewImage').onclick = function () { wx.previewImage({ current: 'http://img5.douban.com/view/photo/photo/public/p1353993776.jpg', urls: [ 'http://img3.douban.com/view/photo/photo/public/p2152117150.jpg', 'http://img5.douban.com/view/photo/photo/public/p1353993776.jpg', 'http://img3.douban.com/view/photo/photo/public/p2152134700.jpg' ] }); }; // 5.3 上传图片 document.querySelector('#uploadImage').onclick = function () { if (images.localId.length == 0) { alert('请先使用 chooseImage 接口选择图片'); return; } var i = 0, length = images.localId.length; images.serverId = []; function upload() { wx.uploadImage({ localId: images.localId[i], success: function (res) { i++; //alert('已上传:' + i + '/' + length); images.serverId.push(res.serverId); if (i < length) { upload(); } }, fail: function (res) { alert(JSON.stringify(res)); } }); } upload(); }; // 5.4 下载图片 document.querySelector('#downloadImage').onclick = function () { if (images.serverId.length === 0) { alert('请先使用 uploadImage 上传图片'); return; } var i = 0, length = images.serverId.length; images.localId = []; function download() { wx.downloadImage({ serverId: images.serverId[i], success: function (res) { i++; alert('已下载:' + i + '/' + length); images.localId.push(res.localId); if (i < length) { download(); } } }); } download(); }; // 6 设备信息接口 // 6.1 获取当前网络状态 document.querySelector('#getNetworkType').onclick = function () { wx.getNetworkType({ success: function (res) { alert(res.networkType); }, fail: function (res) { alert(JSON.stringify(res)); } }); }; // 7 地理位置接口 // 7.1 查看地理位置 document.querySelector('#openLocation').onclick = function () { wx.openLocation({ latitude: 23.099994, longitude: 113.324520, name: 'TIT 创意园', address: '广州市海珠区新港中路 397 号', scale: 14, infoUrl: 'http://weixin.qq.com' }); }; // 7.2 获取当前地理位置 document.querySelector('#getLocation').onclick = function () { wx.getLocation({ success: function (res) { alert(JSON.stringify(res)); }, cancel: function (res) { alert('用户拒绝授权获取地理位置'); } }); }; // 8 界面操作接口 // 8.1 隐藏右上角菜单 document.querySelector('#hideOptionMenu').onclick = function () { wx.hideOptionMenu(); }; // 8.2 显示右上角菜单 document.querySelector('#showOptionMenu').onclick = function () { wx.showOptionMenu(); }; // 8.3 批量隐藏菜单项 document.querySelector('#hideMenuItems').onclick = function () { wx.hideMenuItems({ menuList: [ 'menuItem:readMode', // 阅读模式 'menuItem:share:timeline', // 分享到朋友圈 'menuItem:copyUrl' // 复制链接 ], success: function (res) { alert('已隐藏“阅读模式”,“分享到朋友圈”,“复制链接”等按钮'); }, fail: function (res) { alert(JSON.stringify(res)); } }); }; // 8.4 批量显示菜单项 document.querySelector('#showMenuItems').onclick = function () { wx.showMenuItems({ menuList: [ 'menuItem:readMode', // 阅读模式 'menuItem:share:timeline', // 分享到朋友圈 'menuItem:copyUrl' // 复制链接 ], success: function (res) { alert('已显示“阅读模式”,“分享到朋友圈”,“复制链接”等按钮'); }, fail: function (res) { alert(JSON.stringify(res)); } }); }; // 8.5 隐藏所有非基本菜单项 document.querySelector('#hideAllNonBaseMenuItem').onclick = function () { wx.hideAllNonBaseMenuItem({ success: function () { alert('已隐藏所有非基本菜单项'); } }); }; // 8.6 显示所有被隐藏的非基本菜单项 document.querySelector('#showAllNonBaseMenuItem').onclick = function () { wx.showAllNonBaseMenuItem({ success: function () { alert('已显示所有非基本菜单项'); } }); }; // 8.7 关闭当前窗口 document.querySelector('#closeWindow').onclick = function () { wx.closeWindow(); }; // 9 微信原生接口 // 9.1.1 扫描二维码并返回结果 document.querySelector('#scanQRCode0').onclick = function () { wx.scanQRCode(); }; // 9.1.2 扫描二维码并返回结果 document.querySelector('#scanQRCode1').onclick = function () { wx.scanQRCode({ needResult: 1, desc: 'scanQRCode desc', success: function (res) { alert(JSON.stringify(res)); } }); }; // 10 微信支付接口 // 10.1 发起一个支付请求 document.querySelector('#chooseWXPay').onclick = function () { // 注意:此 Demo 使用 2.7 版本支付接口实现,建议使用此接口时参考微信支付相关最新文档。 wx.chooseWXPay({ timestamp: 1414723227, nonceStr: 'noncestr', package: 'addition=action_id%3dgaby1234%26limit_pay%3d&bank_type=WX&body=innertest&fee_type=1&input_charset=GBK¬ify_url=http%3A%2F%2F120.204.206.246%2Fcgi-bin%2Fmmsupport-bin%2Fnotifypay&out_trade_no=1414723227818375338&partner=1900000109&spbill_create_ip=127.0.0.1&total_fee=1&sign=432B647FE95C7BF73BCD177CEECBEF8D', signType: 'SHA1', // 注意:新版支付接口使用 MD5 加密 paySign: 'bd5b1933cda6e9548862944836a9b52e8c9a2b69' }); }; // 11.3 跳转微信商品页 document.querySelector('#openProductSpecificView').onclick = function () { wx.openProductSpecificView({ productId: 'pDF3iY_m2M7EQ5EKKKWd95kAxfNw', extInfo: '123' }); }; // 12 微信卡券接口 // 12.1 添加卡券 document.querySelector('#addCard').onclick = function () { wx.addCard({ cardList: [ { cardId: 'pDF3iY9tv9zCGCj4jTXFOo1DxHdo', cardExt: '{"code": "", "openid": "", "timestamp": "1418301401", "signature":"ad9cf9463610bc8752c95084716581d52cd33aa0"}' }, { cardId: 'pDF3iY9tv9zCGCj4jTXFOo1DxHdo', cardExt: '{"code": "", "openid": "", "timestamp": "1418301401", "signature":"ad9cf9463610bc8752c95084716581d52cd33aa0"}' } ], success: function (res) { alert('已添加卡券:' + JSON.stringify(res.cardList)); }, cancel: function (res) { alert(JSON.stringify(res)) } }); }; var codes = []; // 12.2 选择卡券 document.querySelector('#chooseCard').onclick = function () { wx.chooseCard({ cardSign: '6caa49f4a5af3d64ac247e1f563e5b5eb94619ad', timestamp: 1437997723, nonceStr: 'k0hGdSXKZEj3Min5', success: function (res) { res.cardList = JSON.parse(res.cardList); encrypt_code = res.cardList[0]['encrypt_code']; alert('已选择卡券:' + JSON.stringify(res.cardList)); decryptCode(encrypt_code, function (code) { codes.push(code); }); }, cancel: function (res) { alert(JSON.stringify(res)) } }); }; // 12.3 查看卡券 document.querySelector('#openCard').onclick = function () { if (codes.length < 1) { alert('请先使用 chooseCard 接口选择卡券。'); return false; } var cardList = []; for (var i = 0; i < codes.length; i++) { cardList.push({ cardId: 'pDF3iY9tv9zCGCj4jTXFOo1DxHdo', code: codes[i] }); } wx.openCard({ cardList: cardList, cancel: function (res) { alert(JSON.stringify(res)) } }); }; var shareData = { title: '微信JS-SDK Demo', desc: '微信JS-SDK,帮助第三方为用户提供更优质的移动web服务', link: 'http://demo.open.weixin.qq.com/jssdk/', imgUrl: 'http://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRt8Qia4lv7k3M9J1SKqKCImxJCt7j9rHYicKDI45jRPBxdzdyREWnk0ia0N5TMnMfth7SdxtzMvVgXg/0' }; wx.onMenuShareAppMessage(shareData); wx.onMenuShareTimeline(shareData); function decryptCode(code, callback) { $.getJSON('/jssdk/decrypt_code.php?code=' + encodeURI(code), function (res) { if (res.errcode == 0) { codes.push(res.code); } }); } }); wx.error(function (res) { alert(res.errMsg); });
js 自己容易搞混的笔记查询的更多相关文章
- 关于开发Windows服务程序容易搞混的地方!
在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的) ...
- node.js使用免费的阿里云ip查询获取ip所在地
在项目过程中,我们常常需要获取IP的所在地.而这一功能一般都是通过一些数据网站的对外接口来实现,这些接口一般情况下都是付费使用的.在这篇文章中我将记录,基于node.js的阿里云免费IP地址查询接口的 ...
- 【转】MongoDB学习笔记(查询)
原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...
- 面试题:你有没有搞混查询缓存和Buffer Pool
一. 关注送书!<Netty实战> 文章公号号首发!连载中!关注微信公号回复:"抽奖" 可参加抽活动 首发地址:点击跳转阅读原文,有更好的阅读体验 使用推荐阅读,有更好 ...
- hibernate查询语句hql中的占位符?参数与命名参数:name设值方式搞混
先贴出异常 Struts has detected an unhandled exception: Messages: Position beyond number of declared ordin ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- 《JS高程》对象&原型学习笔记
ECMA-262 把对象定义为:”无序属性的集合,其属性可以包含基本值.对象或者函数.”可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 6.1.理解 ...
- js实现table中前端搜索(模糊查询)
项目中用到js前端搜索功能,根据 姓名或姓名 进行 搜索,实现方法如下,遍历table所有行中的某列,符合条件则置tr为display:'',不满足条件置tr为display:none. 代码如下: ...
- [node.js]express+mongoose+mongodb的开发笔记
时间过得很快,6月和7月忙的不可开交,糟心的事儿也是不少,杭州大连来回飞,也是呵呵. 希望下个阶段能沉浸下来,接着学自己想学的.记一下上几周用了几天时间写的课设.因为课设的缘故,所以在短时间里了解下e ...
随机推荐
- mysql xtrabackup增量备份
mysql 增量备份策略 周一全备,其他增量备份,根据业务需要,设定保留日期,如保留一月. 增量备份步骤; 1 创建全备 2 根据全备目录,创建增量备份 3 第二次增量备份根据第一次增量备份目录,依次 ...
- JS正则验证邮箱的格式
一.相关的代码 1 function test() 2 { 3 var temp = document.getElementById("text ...
- Visual Assist X 快捷键
Shift+Alt+F Find References 查找引用 Shift+Alt+S FindSynbolDialog 打开查找符号对话框 Alt+G GotoImplementation 在定义 ...
- CSS计数器妙用
做web的经常会遇到类似排行榜的需求, 特别是要求前n名的样式和后面人不一样. 通常大多数人对于这个需求的做法都是在后端处理好排名名次, 在前端填入内容, 然后针对前n名做特殊的样式处理. 但是这样有 ...
- java 解析 json 遍历未知key
1.—————————————————————————————————————————————————————————————— import net.sf.json.JSONObject; Stri ...
- Linux渗透+SSH内网转发
http://www.jb51.net/hack/58514.html http://blog.chinaunix.net/uid-756931-id-353243.html http://blog. ...
- spoj Balanced Numbers(数位dp)
一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...
- 【前段开发】行内元素和块级元素总结(HTML CSS)
块级元素 <address> information on author <blockquote> long quotation <button> push but ...
- Java并发学习之中的一个——线程的创建
本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.与每一个Java语言中的元素一样,线程是对象.在Java中,我们有两种方式创建线程: a.通过直接继承thread类,然后覆盖run方法. b ...
- Memento pattern
21.5 再谈备忘录的封装 备忘录是一个很特殊的对象,只有原发器对它拥有控制的权力,负责人只负责管理,而其他类无法访问到备忘录,因此我们需要对备忘录进行封装. 为了实现对备忘录对象的封装,需要对备忘录 ...