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方法都设置为同步,可以正常初始化了。