需要延迟设置css链接样式表属性

时间:2013-01-29 20:53:40

标签: jquery css timeout fade

我正在尝试延迟链接attrib,以便在内容淡出后应用它。但添加超时功能不起作用。有什么想法吗?

$(function () {
    $(".layout a").click(function () {
        setTimeout(function () { $("link:first").attr("href", $(this).attr('rel')); }, 500)
    $.cookie("Layout", $(this).attr('name'), { expires: 365, path: '/media', secure: true });
    $('.content, .searchresults').fadeOut(500).delay(500).fadeIn(275);
        window.scrollTo(0, 0); // Scroll Window back to Top
        return false;
    });
});

2 个答案:

答案 0 :(得分:0)

不是设置超时以对应延迟,而是可以为fadeOut函数指定回调:

$(".layout a").click(function () {
    $.cookie("Layout", $(this).attr('name'), { expires: 365, path: '/media', secure: true });
    $('.content, .searchresults').fadeOut(500, function() {
        $("link:first").attr("href", $(this).attr('rel'));
    }).fadeIn(275);

    window.scrollTo(0,0);
    return false;
}

查看jQuery参考以获取更多信息:http://api.jquery.com/fadeOut/

我通常通过javascript改变通过链接标记加载的样式表几乎没有运气。

答案 1 :(得分:0)

你被this的范围所击败的时间超过时间。

表达式

$(this).attr('rel');

本身很好,但在setTimeout函数内,this不再引用被点击的元素。

好消息是,通过将$(this).attr('rel')分配给this仍然引用正确对象的合适点的局部变量,可以轻松解决问题。

此外,为了保证计时,您可以移动可能的setTimeout函数,使其成为fadeOut()表达式的回调。

将这两件事加在一起,代码如下:

$(function () {
    $(".layout a").click(function () {
        var rel = $(this).attr('rel');
        $.cookie("Layout", $(this).attr('name'), { expires: 365, path: '/media', secure: true });
        $('.content, .searchresults').fadeOut(500, function() {
            $("link:first").attr("href", rel);
        }).delay(500).fadeIn(275);
        window.scrollTo(0, 0); // Scroll Window back to Top
        return false;
    });
});