【问题标题】:Place 15 seconds delay in a jQuery script在 jQuery 脚本中放置 15 秒延迟
【发布时间】:2015-03-20 07:31:46
【问题描述】:

我有一个脚本可以在单击 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();
<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>

【问题讨论】:

    标签: javascript jquery html iframe


    【解决方案1】:

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

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

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

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

    用一种简单的方式,你在“隐藏”动作之前放置了 15 秒的延迟

    【讨论】:

    • 如何在我的脚本中实现它?我不擅长 JavaScript
    • 感谢您的帮助,我在脚本中实现了但无法正常工作。我做错什么了吗? jsfiddle.net/g40bf0f4
    • @AxelCardinaels 是无效的 JavaScript 语法 15000ms
    • @Murilo,删除持续时间结束时的毫秒,它会起作用。
    【解决方案2】:

    您正在寻找 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);
     });
    

    【讨论】:

    • 如何在我的脚本中实现它?我不擅长 JavaScript
    • 可以举一个在 jsFiddle 中运行的脚本示例。请
    • 你为什么用setTimeout("closeIframe()", 15000);而不是setTimeout(closeIframe, 15000);?这是更好的做法和更少的代码
    • 从来没有向setTimeout传递字符串!
    【解决方案3】:

    使用好旧的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);
    });
    

    【讨论】:

      【解决方案4】:

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

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

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

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

      相关:

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2011-12-28
          • 1970-01-01
          • 1970-01-01
          • 2011-11-12
          • 1970-01-01
          • 2019-09-22
          • 2015-11-06
          • 2023-04-05
          • 1970-01-01
          相关资源
          最近更新 更多