通过X按钮和onload窗口事件关闭弹出窗口

时间:2011-06-16 20:39:15

标签: javascript jquery struts2 popupwindow window.onunload

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

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

所以我可以做window.onunload或者我可以进行身体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";
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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