我有以下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中有没有人知道如何解决这个问题或解决方法?
答案 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。