0

当鼠标悬停在我们的主应用程序的窗口上时,我遇到了一个问题。

我正在使用以下行在 javascript 函数中打开新窗口:

window.open(URL, 'Requests', 'location=no,toolbar=no,status=yes,scrollbars=yes,resizable=yes');

我注意到,如果我通过资源管理器打开一个新的 IE 窗口,将鼠标悬停在我们的主应用程序窗口上不会重新激活自身。即使在这种情况下,主窗口也确实使自己位于由上面的 window.open 命令创建的弹出窗口的“顶部”。

问题是这样的:在javascript中打开“子”窗口时,有什么方法可以将子窗口与父窗口分离?

更多信息:我使用 Infragistics WebDataMenu 并将 ActivateOnHover 设置为 true,因此用户无需单击主菜单项即可查看子菜单选项。不幸的是,该设置会使整个菜单栏变得敏感,因此在其中滑动鼠标会激活菜单(遗憾的是,当弹出窗口处于活动状态时会激活窗口)。这是我要修复的根本行为。

4

2 回答 2

2

该方法将创建一个弹出窗口,该窗口实际上仅通过调用的返回值和弹出窗口上的属性window.open();通过 JavaScript 共享关系。window.opener

您想要的是在您处理“子”弹出窗口时锁定与“父”页面交互的模式窗口的行为。

您可以尝试通过强制关注弹出窗口并阻止任何模糊来与 JavaScript(和您的用户)对抗,但这会在用户想要阅读电子邮件等时让他们发疯(例如,不推荐)

您也可以使用不那么标准的 showModalDialog(); 方法,但支持远未完全跨浏览器,如果您尝试使用它会出现一大堆新问题(在 IE 中没有右键单击,在 IE 中出现缩放问题,并且没有孙子弹出窗口等等)(再次不推荐)

您可以做的是制作一个类似于许多在线照片查看器的“覆盖”弹出窗口,您首先覆盖一个遮罩(通常是半透明的),该遮罩阻止鼠标/焦点在下面的整个页面内容上,然后用您的“弹出内容”覆盖它。只要确保您提供了一个关闭选项,该选项可以在覆盖关闭/完成时移除遮罩。

请注意,如果您需要支持 IE6,您还需要一个 iframe shim(如果需要,请使用 Google)

许多 UI 框架都会为您提供一个像这样的“对话框”。(例如 jQueryUI)

于 2013-01-08T01:31:04.237 回答
0

最终,我放弃了这项工作。我发现我必须做的是从 WebDataMenu 中关闭 ActivateOnHover,它没有回答这个问题,并且需要用户单击菜单以使其下拉,但它成为了一种解决方法。

于 2013-02-21T16:05:49.643 回答