setTimeout();dwr.engine.setAsync();
前台做了个修改页面,希望实现三个下拉菜单初始化,并且可以再次重选。
初始化代码如下:
function initSelectQ(){ var jdSelect = document.getElementById('jdSelect'); dwr.engine.setAsync(false);//设置dwr方法同步 GridService.selectTShsjglJd({},function(data){ var varItemk = new Option("", ""); jdSelect.options.add(varItemk); for(var i=0;i<data.length;i++){ var zbmoption = document.createElement("option"); zbmoption.text = data[i].jdmc; zbmoption.value = data[i].id; jdSelect.options.add(zbmoption); } }); dwr.engine.setAsynctrue);//恢复dwr方法异步 initSelect(); } function initSelect(){ //setTimeout(selectJdSqWg, 500); selectJdSqWg(); } function selectJdSqWg() { var wgname; var sqname; var jdname; var jdSelect = document.getElementById('jdSelect'); var sqSelect = document.getElementById('sqSelect'); var wgSelect = document.getElementById('wgSelect'); dwr.engine.setAsync(false);//设置dwr方法同步 GridService.selectWgInfoByLoginCode('${ryqyVO.mbwgCode}',function(data){ if(data){ if(data.length >0){ jdname=data[0].jdmc; sqname=data[0].sqmc; wgname=data[0].wgmc; for(var i=0;i<jdSelect.options.length;i++){ if(jdSelect.options[i].text == jdname) { jdSelect.options[i].selected = true; changeJD(jdSelect.options[i].value); break; } } //alert(1); for(var i=0;i<sqSelect.options.length;i++){ if(sqSelect.options[i].text == sqname) { sqSelect.options[i].selected = true; changeSQ(sqSelect.options[i].value); break; } } //alert(2); for(var i=0;i<wgSelect.options.length;i++){ if(wgSelect.options[i].text == wgname) { wgSelect.options[i].selected = true; break; } } } } }); dwr.engine.setAsync(true);//恢复dwr方法异步 }
遇到问题,解决方法:
最开始没有设置同步,发现方法里面不alert();不能初始化,不明所以,然后百度得到解释,selectJdSqWg()方法执行要在initSelectQ()执行完成之后才能正常调用,说是要使用setTimeout(selectJdSqWg, 500);方法。最开始500设置的是1,结果dwr读取数据后的回调函数越复杂,时间就要设的越大,对于页面显示有迟缓,然后把函数里面两个ajax方法都设置为同步,可以正常初始化了。