Jquery setTimeout在Firefox 11.0中不起作用

时间:2012-04-11 18:33:57

标签: jquery firefox jquery-plugins scroll

我有以下jquery脚本来打开指向新页面的链接并具有滚动效果。但是,我无法在Firefox 11.0中使用它。

var jump = function (e) {
    if (e) {
        e.preventDefault();
        var target = $(this).attr("href");
    } else {
        var target = location.hash;
    }

    $('html,body').animate(
{
   scrollTop: $(target).offset().top
}, 2000, function () {
   location.hash = target;
});

}

$('html, body').hide();

$(document).ready(function () {
    $('a[href^=#]').bind("click", jump);

    if (location.hash) {
        setTimeout(function () {
            $('html, body').scrollTop(0).show();
            jump();
        }, 1000);
    } else {
        $('html, body').show();
    }
});

它只是循环遍历setTimeout的这一部分,然后在开始时继续开始。

$('html, body').scrollTop(0).show();
jump();

这只发生在Firefox 11.0中有没有人知道如何解决这个问题或解决方法?

3 个答案:

答案 0 :(得分:1)

尝试使用window.setTimeout因为我认为应该如何调用它。另外,你使用超时为0,那么,为什么?

答案 1 :(得分:0)

使用超时为0的setTimeout基本上就好像你根本没有使用setTimeout一样,我想Firefox并不喜欢它。

答案 2 :(得分:0)

错误发生在MVC框架中。 Petr Vostrel就是那个发现它的人,所以我把它归功于他。这是他发现的。

MicrosoftAjax组件尝试某些浏览器的历史记录管理,并且它使用URL的哈希部分,这是一个有效的标准过程,直到此时为止。在初始化时,Sys$_Application$initialize()_navigate()使用_raiseNavigate()应用程序方法。这个专门为Firefox做了一些舞蹈:

// Name:        MicrosoftAjax.debug.js
// Assembly:    System.Web.Extensions
// Version:     4.0.0.0
// FileVersion: 4.0.20526.0

if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash &&
(!window.frameElement || window.top.location.hash)) {
window.history.go(0);
}

三个条件:

browser is Firefox
address carries a hash portion after the URL
it is not inside a frame

所有这些都传递给你的情况,野兽被释放出来:

window.history.go(0);

指示浏览器的历史记录管理器按照作为参数给出的距离返回或前进。 -2退后一步,1前进一步。因此0有效地重新加载页面。并且在每个页面上加载任何给予页面的哈希。无论如何,想不出这条线的任何有效目的......

如果我评论出那些相当毛茸茸且毫无意义的线条,它确实有效!它似乎是Firefox 3.5或更低版本的向后兼容性尝试,所以我想说删除它或更好地更新你的MVC。