JQuery ScrollTop 适用于 chrome 但不适用于 firefox

JQuery ScrollTop works on chrome but not firefox

我有一个简单的 JS/Jquery 脚本,允许用户导航(通过哈希菜单链接和 ScrollTop)到页面部分的特定部分(在本例中为 /guides/ 部分)。该脚本在 Chrome 上运行良好。然而,在 Firefox 上,它似乎没有被触发。

在撰写本文时,我的 chrome 版本是:45.0.2454.85
我的 firefox 是 40.0.3

URL到有问题的站点:genesistutorials101.com
带有散列的链接可以在 MENU 下找到。
我的脚本 运行:

//HASH # NAV
$(function(){

 if (window.location.hash) {
  var target = $(window.location.hash);
  navigateToTarget(target);
 }

 $('.nav-primary a[href*="#"]').on('click', function(event) {
    //console.log("testing");
  var href = $(this).attr("href");
  var target = $(href.substr(href.indexOf("#")));
  navigateToTarget(target);
 });
});

function navigateToTarget(target) {
 if( target.length ) {
  event.preventDefault();
  $('html, body').animate({
   scrollTop: target.offset().top - 155
  }, 1000);
 }
}

我在另一个 Whosebug 线程上读到,当 function() 丢失时 firefox 不喜欢 'event' 但我也试过了,没有任何明显的变化。

因此,出于测试目的,请继续单击 chrome 和 firefox 导航菜单上的任何初学者链接,以了解其中的差异。

任何帮助或指向解决方案的指示都将不胜感激

此致
索克拉

问题是您在 navigateToTarget 函数中调用 event.preventDefault(),但那里没有名为 event 的变量。

它适用于 Chrome(可能也适用于 IE),因为它们有一个全局的 属性 window.event,但是 属性 不是跨浏览器的,而且它无法在没有此 属性.

的浏览器上运行

您应该删除 event.preventDefault(),一切都会正常进行。