Javascript页面转换未定义

Javascript页面转换未定义,javascript,jquery,Javascript,Jquery,我正在尝试将页面转换添加到我的网站。但由于某种原因,当我点击一个链接时,它会重定向到mywebsite.com/undefined 这是我正在使用的代码 jQuery(document).ready(function($) { $('.menu-item').click(function(event) { event.preventDefault(); newLocation = this.href; $('.preloader').fadeIn(1000, newp

我正在尝试将页面转换添加到我的网站。但由于某种原因,当我点击一个链接时,它会重定向到mywebsite.com/undefined

这是我正在使用的代码

jQuery(document).ready(function($) {
  $('.menu-item').click(function(event) {
    event.preventDefault();
    newLocation = this.href;
    $('.preloader').fadeIn(1000, newpage);
  });

  function newpage() {
    window.location = newLocation;
  }
});
我不能让它工作。任何帮助都将不胜感激。

这是因为
newLocation
超出了范围(它仅在
单击功能的范围内可用)。(见更新1。)

相反,将其传递到
newPage
函数中,如下所示:

jQuery(document).ready(function($) {
  $('.menu-item').click(function(event) {
    event.preventDefault();

    $('.preloader').fadeIn(1000, function() {
        // Pass this.href into the newPage function
        newPage(this.href);
    });
  });

  function newPage(newLocation) {
    window.location = newLocation;
  }
});

注意事项:

  • 请注意,我正在将一个函数作为第二个参数传递给
    .fadeIn
    函数。(请参阅。)不能只将
    newPage(this.href)
    传递到第二个参数中,因为这将把
    newPage
    函数的返回值(为null)传递到
    .fadeIn
    函数中
  • 此模式适用于其他jQuery函数,如
    .slideUp
    。下面是
    .slideUp
    的一个实现示例:

    $('.preloader').slideUp({
        duration: 1000,
        easing: "easeInOutQuint"
    }, function() {
        newpage(this.href)
    });
    

更新1:

如注释中所述,由于
newLocation
未在代码段中用
var
声明,因此它应自动成为全局变量。因此,它实际上应该在
newpage
函数的作用域中,而原始代码段应该实际工作。

这是因为
newLocation
超出了作用域(它仅在
单击
函数的作用域中可用)。(见更新1。)

相反,将其传递到
newPage
函数中,如下所示:

jQuery(document).ready(function($) {
  $('.menu-item').click(function(event) {
    event.preventDefault();

    $('.preloader').fadeIn(1000, function() {
        // Pass this.href into the newPage function
        newPage(this.href);
    });
  });

  function newPage(newLocation) {
    window.location = newLocation;
  }
});

注意事项:

  • 请注意,我正在将一个函数作为第二个参数传递给
    .fadeIn
    函数。(请参阅。)不能只将
    newPage(this.href)
    传递到第二个参数中,因为这将把
    newPage
    函数的返回值(为null)传递到
    .fadeIn
    函数中
  • 此模式适用于其他jQuery函数,如
    .slideUp
    。下面是
    .slideUp
    的一个实现示例:

    $('.preloader').slideUp({
        duration: 1000,
        easing: "easeInOutQuint"
    }, function() {
        newpage(this.href)
    });
    

更新1:


如注释中所述,由于
newLocation
未在代码段中用
var
声明,因此它应自动成为全局变量。因此,它实际上应该在
newpage
函数的作用域内,并且原始代码段应该实际工作。

您没有将新位置传递给函数您没有将新位置传递给函数可能更好的做法是将
newLocation
传递给函数以保存pollution@DarrenSweeney,固定的。谢谢您的关注。@我刚刚添加了一个示例,说明如何使用
.slideUp
功能。非常感谢您的帮助!非常感谢。为什么
newLocation
超出范围?它不是用
var
声明的,因此它是一个全局变量,而不是局部变量。可能最好将
newLocation
传递到函数中保存pollution@DarrenSweeney,修正了。谢谢您的关注。@我刚刚添加了一个示例,说明如何使用
.slideUp
功能。非常感谢您的帮助!非常感谢。为什么
newLocation
超出范围?它不是用
var
声明的,因此它是一个全局变量,而不是局部变量。