Javascript for .NET 3.5:如何在弹出窗口关闭后给出文本框焦点

时间:2011-05-09 16:23:25

标签: c# javascript asp.net

有没有办法通过window.open(....)打开弹出窗口,让它保持在主窗口的顶部,关闭后,将焦点放在调用页面上的文本框中?

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

在页面上也是一个文本框,我被要求继续关注。除了显示收据之外,我有它工作。如果我调用服务器或客户端功能来保持文本框的焦点,则弹出窗口会出现在主窗口的顶部一秒钟,然后被主页覆盖,因为文本框会获得焦点,而这不是什么期望的。

3 个答案:

答案 0 :(得分:1)

您是否可以采用不同的设计并使用类似jQuery dialog的内容作为收据而不是回发到服务器?保持焦点客户端比尝试强制它通过服务器端要容易得多。

答案 1 :(得分: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>

答案 2 :(得分:0)

可能对您有用的解决方案是让弹出页面告诉它“父”页面,以便在关闭时将焦点设置为其中一个控件。你可以用javascript做到这一点。

在弹出页面上,将其添加到正文标记

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

警告:只要用户离开页面(即回发,后退按钮,关闭按钮等),onbeforeunload事件就会触发。如果您的弹出页面没有任何导航或任何回发,那么这应该适合您。