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函数后面赋值。

posted @ 2016-01-09 09:54  白尼玛砸缸  阅读(215)  评论(0编辑  收藏  举报