对按钮单击时的两个操作进行排序

Sequencing two action on a button click

本文关键字:两个 操作 排序 单击 按钮      更新时间:2023-09-26

问题:我有一个 asp.net 按钮,单击该按钮后,我正在使用客户端使用window.open()显示另一个窗口<script></script>

"实际上,一旦用户关闭子窗口,我需要在按钮所在的父页面上显示一个弹出窗口(警报消息)。

我尝试的几件事如下:

  1. 我尝试使用 setTimeOut() 暂停几毫秒。这不起作用,因为控件不会等到超时完成。它只是继续执行下一组代码。

  2. 我尝试使用setInterval()但由于某种原因它对我不起作用。下面是其中的代码片段:

    $(document).ready(function () {
             $('#<%=btnClick.ClientID%>').bind('click', function () {
                 var newWindow = window.open("http://www.google.com/", "google", 'resizable=1,width=900,height=800,scrollbars=1', '_blank');
                 newWindow.moveTo(0, 0);
                 var test = setInterval(function (e) {
                     if (newWindow.closed) {
                         alert("HEYY");
                         clearInterval(test);
                         __doPostBack("<%= btnClick.UniqueID %>", "");
                     }
                     else {
                         e.preventDefault();
                     }
                 }, 5000);
             });
         });
    

.

  1. 我还尝试进行ajax调用以打开新窗口并使其async : false,它再次对我没有帮助。

将窗口和计时器变量移出事件处理程序的范围。您需要进行轮询,即定期检查窗口是否已关闭。使用setInterval进行轮询将完成这项工作。

var newWin, pollTimer;
$('#btnId').bind('click', function () {
    newWin = window.open("...", "...", "");
    pollTimer = window.setInterval(function() {
        if (newWin.closed) { 
            window.clearInterval(pollTimer);
            callCodeWhenPopupCloses();
        }
    }, 5000);
});
function callCodeWhenPopupCloses() {
    alert("Popup closed.");
    ...
}