2017-06-04 103 views
0

有什么办法可以禁用java脚本中的“确定”按钮警报?在警报中禁用确定按钮

我有一个调用两个不同窗口的java脚本函数,弹出的第二个窗口被一个警报延迟,因为在打开的第一个窗口中完成一些操作后需要打开它。我需要禁用警报,直到在第一个窗口中完成一些操作。请建议一些方法。

下面是js函数(myFunction的())被称为上的一个按钮单击打开两个窗口:

function myFunction() { 
     myFunction2(); 
     alert("Please wait..."); 
     myFunction1(); 
    } 

    function myFunction2() { 
     var x ="sce"; 
     var URL ="Multiple.jsp?viewStatus="+x; 
     var windowName = "showDeb"; 
      var width = screen.availWidth; 
      var height = screen.availHeight; 
      var w = 900; 
      var h = 500; 
      var features = 
      'width='   + w + 
      ',height='  + h + 
      ',left='   + ((width - w - 10) * .5) + 
      ',top='   + ((height - h - 30) * .5) + 
      ',directories=no' + 
      ',location=no' + 
      ',menubar=no'  + 
      ',scrollbars=yes' + 
      ',status=no'  + 
      ',toolbar=no'  + 
      ',resizable=false'; 

      var strOpen = window.open (URL, windowName, features); 
      strOpen.focus(); 
      myFunction1(); 
    } 
    function myFunction1() { 
     var x ="deb"; 
     var URL ="Multiple.jsp?viewStatus="+x; 
     var windowName = "showSce"; 
      var width = screen.availWidth; 
      var height = screen.availHeight; 
      var w = 900; 
      var h = 500; 
      var features = 
       'width='   + w + 
       ',height='   + h + 
       ',left='  + ((width - w - 10) * .5) + 
       ',top='   + ((height - h - 30) * .5) + 
       ',directories=no' + 
       ',location=no'  + 
       ',menubar=no'  + 
       ',scrollbars=yes' + 
       ',status=no' + 
       ',toolbar=no'  + 
       ',resizable=false'; 

      var strOpen = window.open (URL, windowName, features); 
      strOpen.focus(); 
    } 

回答

0

我会建议使用Cookie您的Windows之间的通信。 在窗口1中,一旦设置了cookie,过程完成。

var date = new Date(); 
date.setDate(date.getDate()+1); 
document.cookie = "name=win1; path=/; expires="+date.toGMTString() 

在将打开窗口2的父文件中,添加计时器以等待窗口1设置cookie。

var myVar = setInterval(myTimer, 1000); // Poll every second to check if window 1 has completed its execution by checking cookie. 
    function myTimer() { 
     var cookies = document.cookie.split(";"); 

     for (var i = 0; i < cookies.length; i++) { 
     if (cookies[i].trim() == "name=win1") { 
      // stop timer and open win 2 
      clearTimeout(myVar); 
      document.getElementById("msg2").innerHTML = "Process in window 1 completed"; 

     // <<< Open window 2 here >>> 

      var dateNow = new Date(); 
      document.cookie = "name=win1; path=/; expires="+dateNow.toGMTString(); 
     } 
     } 

请确保您删除cookie窗口中的一个被打开,车窗2打开后否则就会造成问题的窗口1完成此过程之前重新运行作为cookie将是已经存在了。 要删除cookie,只需将有效期设置为当前时间或私密性。

var dateNow = new Date(); 
document.cookie = "name=win1; path=/; expires="+dateNow.toGMTString(); 

下面是一个演示相同的例子。确保你允许弹出,因为它会尝试打开新窗口。 http://embed.plnkr.co/MVa45iwYuW9asQuYRzBV/

+0

感谢您的建议。但我有一个查询,我从上面了解到的是,如果我知道完成窗口1中的过程所需的时间,我可以使用这种方法。在我的情况下,时间不是固定的,它可以更多地基于数据 – ANITI

+0

您不需要知道在窗口1中完成该过程所需的时间。正如您所说的,窗口1中运行的过程基于数据,需要在完成过程后设置cookie。 父窗口中打开窗口2的计时器将每秒轮询(可配置),以检查cookie是否设置为无限时间,直到窗口1设置cookie。 如果您想在父母停止轮询无限时间,您还可以保持超时(如30分钟)。 –