2016-03-08 99 views
0

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

这是我使用

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

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

的代码我无法得到它的工作。任何帮助,将不胜感激。

+2

你没有将新位置传递给你的函数 –

回答

2

这是因为newLocation超出了范围(它仅在click函数的作用域中可用)。(见更新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函数的第二个参数。 (见API Docs。)您不能只是通过newPage(this.href)进入第二个参数,因为这将通过newPage功能的返回值(这是无效)到.fadeIn功能。
  • 此模式适用于其他jQuery功能,如.slideUp。下面是.slideUp实现的一个例子:

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

更新1:

正如在评论Barmar指出,由于newLocation没有在您的代码段与var声明它应该自动成为一个全局变量。因此,它实际上应该在newpage函数的范围内,并且原始代码段实际上应该可以工作。

+2

虽然为了节省污染,但实际上可以更好地将newLocation函数传递给函数 –

+1

@DarrenSweeney,已修复。感谢您的支持。 –

+1

好东西,现在都很好 –