在jQuery脚本中放置15秒延迟

时间:2015-03-20 07:31:47

标签: javascript jquery html iframe

我有一个脚本,点击后关闭iframe。 我需要当你点击iframe里面的链接有延迟15秒加载iframe中的页面,15秒后iframe自动关闭。



			$(window).on('blur',function(e) {    
				if($(this).data('mouseIn') != 'yes')return;
				$('iframe').filter(function(){
					return $(this).data('mouseIn') == 'yes';
				}).trigger('iframeclick');    
			});

			$(window).mouseenter(function(){
				$(this).data('mouseIn', 'yes');
			}).mouseleave(function(){
				$(this).data('mouseIn', 'no');
			});

			$('iframe').mouseenter(function(){
				$(this).data('mouseIn', 'yes');
				$(window).data('mouseIn', 'yes');
			}).mouseleave(function(){
				$(this).data('mouseIn', null);
			});

			$('iframe').on('iframeclick', function(){
                $(this).hide()
			});

			$('<input type="text" style="position:absolute;opacity:0;height:0px;width:0px;"/>').appendTo(document.body).blur(function(){
					$(window).trigger('blur');
				}).focus();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<iframe style="width:400px;
height:250px;" src="//example.com"></iframe>
&#13;
&#13;
&#13;

5 个答案:

答案 0 :(得分:1)

如果你想坚持使用Jquery,你可以使用.delay()

http://api.jquery.com/delay/

要在iframe关闭前等待15秒,您应该这样做:

$('iframe').on('iframeclick', function(){
                $(this).delay(15000).hide();
}

以一种简单的方式,你会在&#34; hide&#34;之前延迟15秒。行动

答案 1 :(得分:0)

您正在寻找setTimeout()方法。您可以在此处找到如何使用它:http://www.w3schools.com/jsref/met_win_settimeout.asp

在你的情况下会是这样(可以优化,取出全局变量等):

 globalVar = null;
 function closeIframe() {
     globalVar.hide();
 }
 $('iframe').on('iframeclick', function(){
      globalVar = $(this);
      setTimeout("closeIframe()", 15000);
 });

答案 2 :(得分:0)

使用好的旧setTimeout

var timeoutValue = 15000; /*ms*/
setTimeout(function(){...}, timeoutValue);

在你的情况下看起来像:

var close = function(element){element.hide();};
$('iframe').on('iframeclick', function(){
  var timeoutValue = 15000;
  var context = $(this);
  setTimeout(function(){close(context)}, timeoutValue);
});

答案 3 :(得分:0)

将事件侦听器绑定到iframe内的元素仅在父网站和iframe位于同一域时才有效。如果iframe的内容位于不同的域中,则您无法执行此操作,因为它被归类为&#34; click-jacking&#34;,这是一个很大的安全威胁。见http://en.wikipedia.org/wiki/Same-origin_policy

如果iframe位于同一个域中,那么您可以在iframe中添加事件侦听器,然后调用父级来通知事件。

您还可以获取内容并找到要绑定事件处理程序的元素。

$("iframe#name").contents().find(".link").on("click", function() {
    $("iframe#name").delay(15000).hide();
});

相关:

答案 4 :(得分:0)

我使用了sleep()函数并解决了我的问题!