0

关于这个主题有很多问题,但我还没有看到我的情况得到解决,所以我将描述我的情况。

我有一个弹出窗口。有两种方法可以关闭它:按下弹出窗口中的关闭按钮或按下窗口右上角的 x 按钮。它们具有完全相同的效果。如果我可以禁用 x 我会的,但这是不必要的,并且不会很快在您最喜欢的浏览器中发生。本质上,当窗口关闭时我正在做一些后期处理(实际上是会话清理),并且不会产生无休止的新弹出窗口来惹恼我的用户。相信我,客户要求这种行为。

所以我可以做 window.onunload 或者我可以做 body onunload ,无论哪种方式都会给我我想要的结果。然而,还有第三种情况使事情复杂化。在弹出窗口中,可以有一个表单提交,它会更改该弹出窗口的内容。如果是这种情况,将调用 window.onunload 或 body unload,具体取决于我在页面上设置的内容。这不是我想要的。我希望在弹出窗口视觉上从视线中消失(x 或关闭按钮)时进行后处理,但不要在表单提交发生时进行后处理,使弹出窗口仍然在此屏幕上可见。

任何人都可以谈谈这种情况吗?

编辑:我尝试不触发 window.onunload 的解决方案

    function searchFieldTitles()
{
    var searchOptionValue;
    var radioObj = document.getElementsByName("searchOption");
    var radioLength = radioObj.length;
    for(var i = 0; i < radioLength; i++) {
        if(radioObj[i].checked) {
            searchOptionValue = radioObj[i].value;
            break;
        }
    }

    $.get("/myroot/SearchFieldTitles.action", 
            {filterString: document.getElementsByName("filterString")[0].value, 
             searchOption: searchOptionValue, 
             filterBy: document.getElementsByName("filterBy")[0].value},
                  function(data) {                
                  });

      location.href="/myroot/jsp/field_titles/lookupFieldTitles.jsp";
}
4

2 回答 2

0

您可以使用 AJAX 进行表单提交。您甚至可以通过卸载窗口来接收响应并更改窗口内容。

于 2011-06-16T20:41:38.087 回答
0

这有点疯狂,但是您可以click在每个链接(关闭按钮除外)上添加 -handler 并submit在该弹出窗口中的每个表单提交上添加处理程序,该弹出窗口首先禁用onunload处理程序,然后继续执行默认操作。这样,用户可以在弹出窗口中提交表单并加载新页面,而无需触发清理。

F5但是,如果用户重新加载页面,即按下键,这将无济于事。您可以keydown在元素上添加处理程序html以禁用onunload处理程序,如果F5Ctrl-r按下,并且如果弹出窗口没有来自浏览器的重新加载小部件,这似乎可以捕获大多数页面重新加载操作(但是仅在 Firefox 中测试过)。如果其他浏览器支持其他组合键,也必须添加它们。但是,我觉得不太推荐这个,因为在整个页面上捕获所有关键事件让我对可能出现的问题感到不安,而且还需要维护一个取决于浏览器的组合键列表,这听起来像是一个维护地狱. 最好在页面上添加一个标记为“单击此处刷新”的 HTML 按钮,并希望您的用户非常友好地使用该按钮而不是F5.

于 2013-02-09T23:42:18.440 回答