
Can I override onbeforeunload for a particular element?我有一个页面需要做很多工作,并且我不希望用户在没有警告的情况下离开该页面(关闭浏览器,点击后退按钮等)。我发现onbeforeunload事件(我认为它是IE特定的,由于项目使用大量ActiveX,因此对我来说效果很好)。 问题是,我希望用户能够单击右上角的小"帮助"图标并随时弹出帮助窗口。这会导致onbeforeunload触发,即使主窗口永远不会移到任何地方并且页面也永远不会卸载。 在onbeforeunload事件运行时运行的JavaScript函数只是将文本放入event.returnValue中。如果我能以某种方式确定单击了帮助图标,则在这种情况下我无法将文本放入event.returnValue中。但是我怎么能把页面弄清楚呢? 让我猜:帮助" icon"实际上是带有
编辑:基于我的理解不足,我下面的"解决方法"是完全矫kill过正。遵循Shog9的回答。 好的,所以在我写问题时,我想出了一种暂时可以解决的方法。 我将全局JavaScript变量用作布尔值,以决定是否将图标悬停在图标上。然后,我将事件附加到图像的onmouseover和onmouseout事件上,并编写将设置该值的函数。最后,我只是在处理onbeforeunload的函数中编写代码,该函数将在设置event.returnValue。 之前检查此值。 可能不是完美的解决方法,但现在可以使用。 在互联网上,您会发现很多人建议您使用类似 window.onbeforeunload = null ,但这在IE6中对我不起作用。在MSDN文档中阅读该事件对象后,我发现对event.cancelBubble属性的引用,我认为这是解决方案。但是感谢Orso指出设置" event.cancelBubble = true"是无用的,摆脱确认提示的方法是完全排除return语句,我选择使用布尔变量作为标志来决定是否退还东西。在下面的示例中,我以编程方式在后面的代码中添加了javascript代码:
然后,帮助按钮包含以下aspx标记:
这会将'postback'变量设置为true,该变量将在ConfirmExit()函数中获取,具有取消事件的作用。 希望您觉得这很有用。它已经过测试,并且可以在IE6和FF 1.5.0.2中运行。 我的方法有点笨拙,但在大多数情况下都可以使用。 创建一个包含一个带有100%单帧FRAMESET的FRAMESET的"保留"弹出页面,并将普通的onUnload和onbeforeUnload事件处理程序放置在HEAD中。
使用此方法,您可以自由使用想要查看的实际页面,回发并单击超链接,而不会触发外部框架onUnload或onbeforeUnload事件。 如果刷新或实际上关闭了外部框架,则事件将触发。 就像我说的那样,虽然不是完全确定的,但是每次单击或回发时都会触发该事件。 |