js setTimeout
在类似于修改的前端界面中,需要读取用户以前的数据并在页面载入的时候给页面赋上默认的值。
给下拉框默认选中可用$().val()方法,或者或者找到下拉框的节点添加属性attr("selected",'selected');
最近做的一个html5app的开发在此基础上更加复杂了一些。
首先从借口获取到类似[3,8,16]这样的数组,这就意味这要循环出三个下拉框,分别赋值。
那么就根据数组长度循环出对应个数的下拉框,用js写入html。
下拉框的数量是有了,但是下拉框的下拉内容不是静态的,而是要从接口获取的。
从借口获取下拉框的列表内容,整理并写入循环出的下拉框,(循环出的下拉框都有一样的class,写入下拉列表时$(.class)像这样根据class来写入,这样下拉列表就都有了)。
然后再来循环每一个下拉列表,给下拉列表依次赋上数组里的值,我用的是each循环,因为没有计数器,所以在循环里面自己建了个计数器,类似如下。
//循环必含信息赋值 function add_andinfo_value(){ $(".and_info_list").each(function(){ //循环计数 i=getLocVal('ii'); if(i==""){ i=0; } //alert(data.andInfoCategoryParamIds[i]); var qq =$(this).find("option").eq(data.andInfoCategoryParamIds[i]); qq.attr("selected",'selected'); //修改text $(this).prev().prev().text(qq.text()); i++; setLocVal('ii',i); }) }
注意,这个计数器是使用本地储存,在数组都完成后要记得把这个本地存储清空,否则会有意想不到的事情发生。
这样就完成了赋值,你以为就这样结束了。图样图破森,一直赋值不成功。
最后分析后的结果是,赋值函数赋值的时候,html的列表内容还没有被载入,即使载入函数是在前面执行的。这样的话就使用setTimeout函数将赋值函数延迟一秒执行,结果成功。
-----------打脸更新-------------------
在后面不就的学习和工作中发现,使用setTimeout虽然短时间内解决了问题,但这种写法是不稳定和不负责任的。
新学到的赋值是在ajax中进行赋值,这样能保证更快的赋值,对异步加载还需要有更好的认识。
在ajax内部写入内容后进行赋值,而不是在ajax函数后面赋值。