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

Javascript for .NET 3.5: How to give textbox focus after a pop-up is closed

本文关键字:窗口 焦点 文本 NET for Javascript      更新时间:2023-09-26

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

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

页面上还有一个文本框,我被要求保持焦点。除了显示收据时,我让它工作。如果我调用服务器或客户端函数来保持文本框的焦点,弹出窗口会在主窗口的顶部出现一秒钟,然后被主页覆盖,因为文本框接收焦点,这不是想要的。

您是否可以采用不同的设计并使用类似jQuery对话框的内容来获取收据,而不是回发到服务器?维护焦点客户端将比尝试强制它通过服务器端要容易得多。

可能适合您的解决方案是让弹出页面告诉它的"父"页面,以便在关闭时将焦点设置为其控件之一。 你可以用javascript来做到这一点。

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

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

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

这可能不是最有效的方法,但您可以打开窗口并让 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>