简单东西-项目开发之js总结
1 ajax非异步调用,且调用函数具有返回值
function getEncoderInfo(id){ var encoder = []; $.ajax({ type : "post", url : basePath+"/management/source/findSourceById", data : { id:id }, dataType : "json", async:false, success : function(data) { encoder = data.source; }, error : function(XMLHttpRequest, textStatus, errorThrown) { if(textStatus=="error"){ bootbox.alert("暂时无法连接服务器,请稍后重试"); } } }); return encoder; }使用Ajax发送请求,并且需要非异步获取返回值时,可以设置async标识为false,同时在返回函数中收集返回值,然后再函数结尾返回。而如果在success分支中直接返回的话,仅仅标识的是该回调函数success的返回,而不是整个getnEncoderInfo的返回。所以,如果调用ajax的外层函数必须在ajax调用完成后添加return语句才能保证该函数有返回值。return encoder;是写在success分支中的话,那么该函数的返回值就成了undefined了。
2 jquery的bind事件
// document initial statement var picEncoder = null; function createPicEncoder(){ //初始化类信息 picEncoder = new PicEncoder(name,rowX,rowY); var result = picEncoder.init(); //show $("#layoutDiv").css("display","block"); $("#picencoder_div").modal('show'); } function PicEncoder(name,rowX,rowY) { //操作类型:添加或者修改 this.action = 'add'; // init 各种绑定事件 this.init = function() { var obthis=this; //保存按钮:先解除与先前对象的绑定事件, //再重新设置click事件 $("#btn-confirm").unbind(); $("#btn-confirm").on("click",function(){ obthis.savePicEncoder(); }); } }JS以面向对象的方式定义全局对象,对象的init中设置了页面按钮的绑定事件,如果没有unbind()方法,那么btn-confirm元素的绑定的事件的个数跟this.init方法执行的次数是一样的。因为没有解除与先前的picEncoder对象的绑定,每次提交都会增加一个绑定事件,最终导致的后果是:一个提交操作,最终调用了N次保存操作,这个N就是init执行的次数。为元素绑定事件之前,应该分析是否需要解除先前的绑定后再重新设置绑定事件。
此外,只有对已经添加到页面中的元素,上述绑定事件才会生效。先将元素加载到页面,在为元素添加事件,这样事件才有效:
var con=""; for(var i=0;i<blocks.length;i++){ con+='<div class="bgColorDiv">'; con+='<img title="解除绑定" class="deleteImg" style="width:30px;" src="'+basePath+'/img/unbind_blue.png" />'; con+='</div>'; con+='<lable class="decoderLabel" value="'+nextIndex+'" style="font-size:18px;">'+encoder.name+'</label>'; con+='</div>'; } $("#divLib").html(con); //添加deleteImg的绑定事件 $(".deleteImg").unbind(); $(".deleteImg").on("click", function(){ });如果一个元素标签没有被添加到html页面中,那么对这些元素执行的bind事件将会无效,即上述代码,如果将deleteImg的绑定事件代码放在for的拼接代码中,那么我们点击deleteImg时,按钮是没有任何反应的。
3 前端调试
console.log输出调试信息,非常方便。这么简单实用的调试技巧,没有写js之前竟然不知道。前端编程,其实也不亚于后台,完成了一个需求功能之后,我的一个js文件,竟然也达到了600多行,其调试难道不亚于服务器端代码。js的面向对象的编码方式,值得深究。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。