【问题标题】:Delay following link in jQuery延迟jQuery中的链接
【发布时间】:2015-08-05 09:40:12
【问题描述】:

因为我想在用户单击链接时显示一个简短的动画,所以我想在重定向之前确保动画是完整的。为此,我想我可以设置一个简单的时间来跟踪链接,如下所示:

$("a[href^='http://'], a[href^='https://']").click(function(e) {
    setTimeout(function() {
        window.location.href = $(this).attr("href");
    }, 1200);
    console.log($(this).attr("href"));
    e.preventDefault();
});

显然,它没有。虽然我不明白为什么。没有调用 console.log,但我很确定我的选择器是正确的。我在这里错过了什么?

Fiddle.

【问题讨论】:

标签: jquery url timeout delay


【解决方案1】:

这看起来像是 jQuery edge 中加载方法中的一个错误,如果您看到下面的代码,它正在调用 off = url.indexOf(" "),但是当 $(window).load(function(){}) 时,url 的值是一个没有 @ 的函数987654328@财产。

jQuery.fn.load = function( url, params, callback ) {
    if ( typeof url !== "string" && _load ) {
        return _load.apply( this, arguments );
    }

    var selector, type, response,
        self = this,
        off = url.indexOf(" ");

    if ( off > -1 ) {
        selector = jQuery.trim( url.slice( off ) );
        url = url.slice( 0, off );
    }

    // If it's a function
    if ( jQuery.isFunction( params ) ) {

        // We assume that it's the callback
        callback = params;
        params = undefined;

    // Otherwise, build a param string
    } else if ( params && typeof params === "object" ) {
        type = "POST";
    }

在 jsfiddle 中,您可以看到类似 Uncaught TypeError: url.indexOf is not a function 的错误。这是因为默认情况下 jQuery 将脚本添加到 dom 就绪处理程序中。如果您将脚本位置更改为 head/body,则使用下面给出的 dom 就绪处理程序,它工作正常

jQuery(function($){
    $("a[href^='http://'], a[href^='https://']").click(function(e) {
        setTimeout(function() {
            window.location.href = $(this).attr("href");
        }, 1200);
        console.log($(this).attr("href"));
        e.preventDefault();
    });
})

演示:Fiddle

【讨论】:

  • 是的,jQuery edge 应该只用于实验目的(?!)。有很多bug,例如:jsfiddle.net/b1wa99xz
  • 我想知道这一点。这是什么edge?我以为这是最新的稳定版本?另外,由于某种原因,我似乎无法运行我的功能。例如,打开一个新窗口不起作用。这是由于 JSFiddle 的限制,还是我做错了什么?链接:jsfiddle.net/BramVanroy/wcc989jk/3
  • @BramVanroy stackoverflow.com/questions/7035328/… - 它是夜间构建的,所以可能不是一个稳定的
  • @BramVanroy 对我来说,弹出被阻止的消息即将到来......这是一个浏览器功能
  • 啊,应该用谷歌搜索一下。我的错。谢谢。哦,该死的,我想这意味着我不能使用我的技术,因为浏览器会简单地阻止它。 :-(.
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多