Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在一定时间段内自动打开和关闭弹出窗口_Javascript_Html_Popup - Fatal编程技术网

Javascript 如何在一定时间段内自动打开和关闭弹出窗口

Javascript 如何在一定时间段内自动打开和关闭弹出窗口,javascript,html,popup,Javascript,Html,Popup,我正在制作一个网页,在其中我必须打开一个弹出窗口,它应该保持8秒(8000毫秒)的时间段打开 在此时间段后,弹出窗口应关闭。4秒钟后,我需要再次打开相同的弹出窗口8秒钟 我想在弹出窗口自动打开和关闭之前设置一些延迟(4秒),弹出窗口必须保持打开8秒 这是我的密码: <html> <head> <script> function call() { popup = window.open('http:

我正在制作一个网页,在其中我必须打开一个弹出窗口,它应该保持8秒(8000毫秒)的时间段打开

在此时间段后,弹出窗口应关闭。4秒钟后,我需要再次打开相同的弹出窗口8秒钟

我想在弹出窗口自动打开和关闭之前设置一些延迟(4秒),弹出窗口必须保持打开8秒

这是我的密码:

<html>
<head>
    <script>
        function call()
        {
            popup = window.open('http://www.google.co.in');         
            setInterval(function() {wait();},4000);
        }   
        function caller()
        {
            setInterval(function() {call();},5000);
        }
        function wait()
        {
            popup.close();
        }
    </script>
</head>
<body onload="caller();">
</body>
</html> 

函数调用()
{
弹出=窗口。打开('http://www.google.co.in');         
setInterval(函数(){wait();},4000);
}   
函数调用者()
{
setInterval(函数(){call();},5000);
}
函数wait()
{
popup.close();
}
我熟悉java脚本函数,如
setInterval()
setTimeout()
,但我发现它们在这种情况下都没有用处。 我也允许我的浏览器打开弹出窗口,但这个脚本会打开一个弹出窗口,并随着时间的推移关闭它。 请帮我找出代码中的小故障

谢谢。

试试这些:

function call() {
    popup = window.open('http://www.google.co.in');         
    setTimeout(wait, 8000); // closes the pop-up after 8 secs delay
}

function caller(){
    setInterval(call, 12000); // opens a pop-up on every 12th second
}
当前的
调用()
每次执行时都会创建一个新的间隔。

您可以将其作为“场景”编写:

如果您需要在某个步骤中重复该循环,当然可以使用next(0)


当然,必须有函数showPopup和hidePopup,你不能把你的时间间隔分配给任何变量,如果没有对这些时间间隔的引用,它们将无限期地运行,无法清除它们。使用setTimeout做您想做的事情的方法可能会更好,因为打开/关闭和重新打开之间的时间间隔都不同,而且您在持续运行时间间隔方面也没有问题。下面的代码创建一个循环,该循环将无限期运行,直到您希望它停止为止

var popup = {
    open : function()
    {
        // Open popup
        this.popupWindow = window.open('http://www.google.co.in');

        // Return a timeout function
        return setTimeout(function() {
            // run close function on completion of timeout
            popup.close();
        }, 8000);
    },
    close : function()
    {
        this.popupWindow.close();
        // Assign timeout to local variable
        this.timeout = this.loop();
    },
    loop : function()
    {
        var self = this;

        // On first run open popup immediately, or wait 4 seconds and restart
        // the loop
        if (self.active === true)
        {
            return setTimeout(function() {
                self.timeout = self.open();
            }, 4000);
        }
        else
        {
            self.active = true;
            self.timeout = self.open();
        }
    },
    clearLoop : function()
    {
        clearTimeout(this.timeout);
        this.active = false;
    }
};

popup.loop();
在您可以调用的任何时候停止循环

popup.clearLoop();

您的代码的格式看起来不错,但请尝试在代码上下功夫。
试着按照下面给出的方式使用它,这是你的全部代码,我已经在我的系统上试用过了,它正在工作

<html>
<head>
    <script>
        function call()
        {
            popup = window.open('http://www.google.co.in');         
            setTimeout(wait, 8000);
        }   
        function caller()
        {
            setInterval(call, 12000);
        }
        function wait()
        {
            popup.close();
        }
    </script>
</head>
<body onload="caller();">
</body>
</html>

函数调用()
{
弹出=窗口。打开('http://www.google.co.in');         
设置超时(等待,8000);
}   
函数调用者()
{
设置间隔(呼叫,12000);
}
函数wait()
{
popup.close();
}

您好,您可以使用以下代码在特定间隔后关闭弹出窗口

 <button class="btn btn-success" type="submit" id="spk_button" onclick="javascript:setTimeout(function(){window.close()},3000);">Save</button>
保存

此解决方案非常冗余。我不确定这真的是个好主意!Teemu的答案似乎更好,避免做很多不需要的测试。如果您愿意,您可以阅读以下内容:无论如何,您确切地知道将调用的交换机的下一个“case”是什么,因此我不认为switch语句适合这种情况。我同意,这是多余的,但它是通用的。当然,如果f.e.场景步骤被声明为数组或对象,那么它可以写得更好……可能是
 <button class="btn btn-success" type="submit" id="spk_button" onclick="javascript:setTimeout(function(){window.close()},3000);">Save</button>