javascript 函数同步的问题

zlntang 2009-06-12 04:04:09
var str=openDia("a.aspx");
//能不能在这里加上什么,或者在close方法里加入什么,让我close了,再执行后面的。
就像ajax里的同步一样,要执行完了,才能执行后面的,

alert(str);

openDia这方法是动态创建一个div,,在div里在动态创建了一个iframe,把a.aspx给iframe,
a.aspx页面有一个方法,close(),,在close里我想传一个结果回来给str,同时把div remove掉,
问题是,我怎么把值传回来??
具体的功能就像模块窗口一样,只是换一种表现方式。

请高手指点。。。

...全文
83 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mark2Win 2009-06-13
  • 打赏
  • 举报
回复
或者,在a.aspx页面close的时候,

if(opener.fireWhenAClosed){ //判断opener是否有fireWhenAClosed函数,或者加入对Page名的判断
opener.fireWhenAClosed();
}

这样应该算是比较通用吧
Mark2Win 2009-06-13
  • 打赏
  • 举报
回复
注意使用iFrmame1.contentWindow.mePageAExists来判断A页面是否存在只是简单作判断,你还可以根据你的实际情况写得更完善些,比如A页面是否已经完全加载等等
Mark2Win 2009-06-13
  • 打赏
  • 举报
回复
lz遇到的问题我处理过类似的,我是需要动态加载一个页面,在完全加载完并且打印完毕之后弹出对话框,然后母页面往下执行,我来说说我的思路:

1. 你可以在a.aspx里面定义一个变量,比如:

var mePageAExists = true;//注意名称可以取得独特一些

2. 循环判断页面a页面是否已经被关闭,若关闭了则执行下面的代码(建议把这个代码另外建立函数)
function fireWhenAClosed(){
//A页面关闭后要执行的代码
}

function openDia(pageURL){ //注意这里是你的openDia函数
//你之前的代码
var myIntervalID = window.setInterval(
function(){
if(iFrmame1.contentWindow.mePageAExists)//iFrame1是你动态创建的iframe
//说明a页面还没有被close,这里没有代码,这是方便你理解
else{
//a页面已经close了
fireWhenAClose();//执行关闭a页面后的代码
window.clearInterval(myIntervalID);//停止循环触发检查
}
}
,10)//10ms检查一次,时间可自己调
}

ps: 为何要用setInterval的方式进行循环判断而不用while语句?很简单,while语句会造成阻塞。
hchxxzx 2009-06-12
  • 打赏
  • 举报
回复
我的意思是要等到我关闭a.aspx里时候,已经有返回值了,
才继续执行下面的语句
---------------------------------
暂时,目前除了模态窗口之外,还没有类似的其他办法能够实现。

不过,或许有一种思路可以实现(我没有试过)


var tmp = 0;
function f()
{
//弹出层,执行a.aspx页面
var str=openDia("a.aspx");

//本来,这里应该直接执行下去的,但现在
while (tmp == 0)
{
//当临时变量为0时,不断循环,维持本脚本不结束
 //直到tmp被a.aspx执行完毕时修改后,此脚本才结束。
}
}
wuyq11 2009-06-12
  • 打赏
  • 举报
回复
在a.aspx关闭时,通过opener或parent调用传值给父页面函数,实现给
txtName赋值
zlntang 2009-06-12
  • 打赏
  • 举报
回复
对我的意思就是ShowDialog ,
但是楼上所有的回答都不能满足呀。

用cook保存也不行,
如:
function test(){
var str=openDia("a.aspx");

txtName.text=str;//这时str还没有值,因为a.aspx里那个方法还没有执行,但这里已经执行了。当a.aspx里的方法执行完了,
test方法都执行完了,所以a.aspx里值行就没有任何意义了。,我的意思是要等到我关闭a.aspx里时候,已经有返回值了,
才继续执行下面的语句,也就是说要等到str有值了,才执行txtName.text=str;这句
..

..

.
.
}
BossFriday 2009-06-12
  • 打赏
  • 举报
回复
你的意思就是winform里的Form.ShowDialog
但是在web里一般就是用js里的ShowDialog,父窗体接受子窗体(Dialog)的返回值,来处理了.
zkcq2004 2009-06-12
  • 打赏
  • 举报
回复
想通用的话用Cookie之类的保存下来吧 要不然就4楼的了
zlntang 2009-06-12
  • 打赏
  • 举报
回复

谢谢各位的回答,
parent.document.getElementById(),这个方法是不可取的,
一个页面调用可以这样,但如果要通用就没办法了,
我要的是就像是 widow.returnValue,这样的,
返回的值是不确定的,接收的控件/。。。。也是不确定的。。
dd__dd 2009-06-12
  • 打赏
  • 举报
回复
a.aspx的close()方法里用
parent.document.getElementById()获取父页面的控件,把a.aspx页要传的值赋给父页面的控件就行了
zhulong1111 2009-06-12
  • 打赏
  • 举报
回复
关注!
takako_mu 2009-06-12
  • 打赏
  • 举报
回复
沒遇到過復雜的異步的問題,不知道如何解.
suifengnet 2009-06-12
  • 打赏
  • 举报
回复
绑顶下

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧