高分跪求js高手,js暂停功能 150

背景介绍:我有一个js文件里面有个复杂的functiona(),至于外面谁会去调用它我并不清楚。目前碰到的问题是,我需要在这个functiona()中调用一个新funct... 背景介绍:我有一个js文件里面有个复杂的function a(),至于外面谁会去调用它我并不清楚。目前碰到的问题是,我需要在这个function a()中调用一个新function b()去给当前引用的页面(假设是a.html)创建一个iframe src=proxy.html.同时在这个代理页面onload时,会做一些操作,然后在父页面a.html中创建一个文本框,把操作得到的值传给文本框。接下来function a在调完function b后,我希望过1秒钟去取代理页面创建的文本框的值。并进行处理,返回处理值。
代码介绍:
【请看注释】
pp.js里
middle: function() {//类似于背景介绍里的function a
if (!this.config.isBackgroundCanClick) G('dialogBoxBG').style.display = '';
var oDialog = G('dialogBox');
oDialog['style']['position'] = "absolute";
oDialog['style']['display'] = '';
var sClientWidth = document.body.clientWidth;
var sClientHeight = document.body.clientHeight;
///////////////////////////////////////////重点在这里,前面的代码先别管////////////////////////////////////
getParentTopAndHeight(true);//开始调用新增iframe,类似于代码里的function b

//在此,我希望js暂停1秒,高分跪求

//////////////////////////////下面的代码也别管,获取文本框的值并处理后返回//////////////////////

//获取文本框proxyTopAndHeight的值
var sScrollBodyObj = document.getElementsByTagName('body')[0].document;
var proxyTopAndHeight = sScrollBodyObj.getElementById("proxyTopAndHeight").value;
if(""!=proxyTopAndHeight){
var topValueProxy = proxyTopAndHeight.slip(",")[0];
var heightValueProxy = proxyTopAndHeight.slip(",")[1];
alert(topValueProxy);
alert(heightValueProxy);
var sTop =(topValueProxy+(heightValueProxy-oDialog.offsetHeight)/2)-120;
}else{
var sTop =(285+(532-oDialog.offsetHeight)/2)-120;
}
//删除iframe
getParentTopAndHeight(false);
//原语句
//var sScrollBodyObj = document.parentWindow.parent.parent.parent.document.body;
//var sTop =(sScrollBodyObj.scrollTop+(sScrollBodyObj.clientHeight-oDialog.offsetHeight)/2)-120;
var sleft = (sClientWidth / 2) - (oDialog.offsetWidth / 2);
if (sTop < 1) sTop = "20";
if (sleft < 1) sleft = "20";
oDialog['style']['left'] = sleft + "px"; //左侧位置
oDialog['style']['top'] = sTop + "px" //顶部位置
}

因为这个是js文件中的function,外面还有function在调用这个function,貌似无法将获取文本框的相关代码用setTimeout(function xx(),1000)中的function xx 括起来。

在调试中,我发现js线程并去在setTimeout处等待,而是继续往下走,直到出了pp.js中的middle function 后还走了别的function,一直走下去,最后才来处理setTimeout里的function xx

跪求解决方案啊。。。。。。。。。。。。。。我估计不是高手估计都看不懂我的问题。。。。。。。。。。。。。送分200分。。。。关键是想解决问题啊。。。。。

简明之,就是求一个function中暂停的功能,暂停完后继续跑function中的代码。但是这些代码不能用新的function括起来。
既然下面有个哥们已经提到了跨域,没错,就是处理跨域。
哥们几个请看看function里的那段js,
//原语句
//var sScrollBodyObj = document.parentWindow.parent.parent.parent.document.body;
//var sTop =(sScrollBodyObj.scrollTop+(sScrollBodyObj.clientHeight-oDialog.offsetHeight)/2)-120;
正是因为向上取不到document.body,我才想在这段代码中间插入一个iframe代理页面,与最外层页面同域,获取到最外层的参数,通过再新建一个iframe代理页面(此时跟js文件当前的页面同域),将获取到的值塞过去,但是js却无法中途暂停,去获取值。
大家请看下我写的:
http://blog.csdn.net/spring123tt/article/details/8744977

现在就是当两层代理已经将值送到了test.jsp时,pp.js 里的function却不能停下来重新取值。
展开
 我来答
百度网友a19d193
2013-04-10 · TA获得超过3446个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1452万
展开全部
利用ajax吧。发出一个同步的ajax请求,并设置超时时间为1000毫秒,然后你做一个后台页面,后台的代码是可以暂停的,比如php可以用sleep(1)暂停1秒。当然你实际上可以让后台页面暂停更长时间,反正真正发挥作用的计时是ajax的超时设置,只要比超时设置的时间长就行了。
然后你就发这个ajax请求好了,不需要处理返回值什么的。

回答了你的问题之后我突然发现自己太创意了,哈哈
loveandkissyou
2013-04-10 · TA获得超过2297个赞
知道大有可为答主
回答量:2332
采纳率:0%
帮助的人:2543万
展开全部
最好不要用延迟时间做,因为你不知道iframe什么时候加载完毕。不过jquery里面有delay()函数,是延迟技术

跨域请求iframe,判断iframe加载状态是否是完成状态,网上有很多方法。

gg搜:”iframe 加载状态“

iframe技术已经淘汰,能用到iframe的不是菜鸟,就是高手
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gjgj821
2013-04-11 · TA获得超过416个赞
知道小有建树答主
回答量:501
采纳率:100%
帮助的人:470万
展开全部
类似其他语言的sleep效果对么

可以试试这个
var start=new Date().getTime();
while(true) if(new Date().getTime()-start>n) break;
但性能估计是个问题

最好还是你调整下代码,整个function a进行逻辑分割,直接将后续的代码建立个function c,然后
setTimeout(c,1000);

至于你说的“貌似无法将获取文本框的相关代码用setTimeout(function xx(),1000)中的function xx 括起来”
估计是代码本身问题,可以多调试下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
全栈达人老Y
2013-04-09 · TA获得超过1341个赞
知道小有建树答主
回答量:788
采纳率:33%
帮助的人:450万
展开全部
感觉你应该换换思路,感觉思路有问题,js本来就是没有阻塞的,所以你不能让它在某个地方暂停,而且你那个1s貌似也有问题,假如你那个proxy.html 1s没有加载完怎么办?你里面的值照样取不到啊,既然你是在iframe里,而且不存在跨域,那么直接可以用proxy.html里面的代码执行完成之后过一秒来调用外层页面的方法,这样不是更好?
追问
你的问题提到了点子上,就是跨域,proxy.html其实只是个简单的说法,真正的是它还衍生出了另一个代理页面。姑且不考虑1s几s的问题。因为这只是个框架js文件里的function,外面还有多少页面的function在调用它,我并不清楚,也没法一一找出处理。是人家页面调用进了这个js里的function,我才要跨域处理一些参数传回这个function继续处理。有啥好的建议么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rkc009
2013-04-09 · TA获得超过1499个赞
知道大有可为答主
回答量:2098
采纳率:60%
帮助的人:1708万
展开全部
自己执行自己就ok了!
如:
function A(n){
if(n == 0){
// 暂停代码

setTimeout( function(){A(1);},5000);
}
else{
// 在执行其他代码

}
}
A(0);
更多追问追答
追问
兄台,我想要的是按这种顺序来执行的:
function A(n){
if(n == 0){
// 暂停代码
alert(1);
setTimeout( function(){A(1);},5000);
}
else{
// 在执行其他代码
alert(2);
}
}
A(0);
alert(3);
追答
你的代码意思是值:等A函数执行后 在执行 alert(3)吗?
这样是不行的!js是解释性语言 是又上而下顺序执行哦!
解决这类问题一般都采用 回调函数哦!

所以 alert(3)必须在 A函数中 else{}中执行才正确!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式