当前位置: 代码迷 >> JavaScript >> setTimeout()不实施
  详细解决方案

setTimeout()不实施

热度:848   发布时间:2013-11-02 19:41:10.0
setTimeout()不执行
我在进行模糊查询的时候,若在setTimeout("bdSearch()",100);前加一个alert(),就能出现期望结果,不加就不会出来,大家看看这是怎么回事啊?
function onLoadInpDiagAdd(){
document.all.inpDiagEditTd.innerHTML=Haitai.Ajax.request({url:"do?module=report&action=InpDiag&method=addInpDiag&diagTypeCode="+<%=diagTypeCode%>,
form:inDiagForm,
callback:function(text){document.all.inpDiagEditTd.innerHTML=text;}});
setTimeout("bdSearch()",100);
}
onLoadInpDiagAdd();

function bdSearch(){
}


------解决方案--------------------
看代码是没问题的,即使Ajax时间再短也没关系,因为它JS有一个机制会预编译函数与变量。
所以楼主最好是看通过console.log的方式看下是什么问题导致没执行
------解决方案--------------------
我想我知道楼主的错误了,楼主本身执行bdSearch这个方法是没问题的,问题出在你是AJAX(异步的)请求,你并不是在回调函数里执行这个方法,
也就是说你的代码,当你在执行bdSearch方法的时候ajax请求还没完毕,那么你后台数据都没请求下来就执行这个模糊查询,自然是没效果的了。
所以当你在这个代码之前alert()一下等于间接延长了执行bdSearch的时间,这时候ajax请求已经请求下来了数据。

所以你这个代码只需要吧



function onLoadInpDiagAdd(){
document.all.inpDiagEditTd.innerHTML=Haitai.Ajax.request({
    url:"do?module=report&action=InpDiag&method=addInpDiag&diagTypeCode="+<%=diagTypeCode%>,
    form:inDiagForm,
    callback:function(text){
           document.all.inpDiagEditTd.innerHTML=text;
           bdSearch()
        }
     });
}
onLoadInpDiagAdd();

function bdSearch(){
}