2011-05-09 50 views
4

之后有没有办法打开通过window.open弹出(....),让它留在主的顶部窗口,并在其结束时,将焦点放在呼叫页面上的文本框中?的JavaScript .NET 3.5:如何给文本框的焦点弹出关闭

我的职责调整是别人写的功能。 .NET 3.5页面当前允许库存重新加载,并且在点击按钮时,新的弹出窗口显示收据。弹出窗口的html存储在隐藏字段中,并通过调用js函数打开。

在页面也是我已被告知要保持焦点在文本框中。我有工作,除了显示收据时。如果我调用服务器或客户端功能来维持文本框的焦点,弹出窗口会在主窗口顶部显示一秒,然后由主页面覆盖,因为文本框获得焦点,而这不是期望。

回答

0

这可能会为你工作的解决方案是让弹出页面告诉它的“父母”页面设置焦点之一它控制何时关闭。你可以用javascript来做到这一点。只要用户从页面导航离开(即回传,后退按钮,关闭按钮,等onbeforeunload事件触发:

在您的弹出页面,将其添加到body标签

<body onbeforeunload='window.opener.getElementById("textbox_to_focus").focus();'> 

买者)。如果您的弹出式页面没有任何导航或任何后贴,那么这应该适合您。

+0

乱搞你的建议后,它出错了,我终于意识到你的声明失踪'文件' – Bengal 2011-05-09 21:53:24

+0

所以下面的工作。 – Bengal 2011-05-09 21:53:55

+0

对于糟糕的代码示例而言,听到并抱歉的好消息。我几乎不记得我脑海中的任何东西。诅咒你谷歌:) – CheckRaise 2011-05-10 15:08:58

1

是你有可能采取不同的设计和使用的东西像jQuery dialog的收据,而不是回发到服务器的?维持焦点客户端将比通过服务器端强制它更容易。

+0

不幸的是,我不能使用jQuery – Bengal 2011-05-09 16:39:24

+0

确定这是一个令人失望。您提到“如果我调用服务器或客户端功能来维持文本框的焦点,弹出窗口就会出现”。我假设这个弹出窗口是你描述的收据。什么导致弹出窗口出现?当文本框按照您描述的方式获得焦点时,必定会有某种事件触发。 只有当您从服务器回传时才显示弹出窗口,还是当您通过javascript将焦点设置到文本框时它也会显示? – 2011-05-09 16:50:54

0

它可能不是最有效的方式,但你可以打开窗户,并与每一秒的间隔在主窗口中JS定时器运行。然后使用if(window.closed)来确定窗口是否已关闭。如果有,则将焦点设置到文本框并禁用定时器。

这里有一个如何上面可以实施一个示范页面:

<html> 
<head> 
<script type="text/javascript"> 

testwindow = window.open("<your page>","window"); 

function timer() 
{ 
    var t=setTimeout("checkWindow()",1000); 
} 

function checkWindow() 
{ 

if(testwindow.closed) 
    document.getElementById("tbox").focus(); 
else 
    timer(); 

} 

</script> 

</head> 
<body onload="timer()"> 
    <input name="tbox" /> 
</body> 
</html> 
+0

我感谢你的努力。我确实按照你的建议使用了一个计时器,但不知怎么的,它不能成功地连接它。谢谢反正,这是一个有趣的想法 – Bengal 2011-05-09 21:55:22

+0

@孟加拉 - 没问题:)这只是一个想法。 – keyboardP 2011-05-09 21:56:33