2016-03-08 34 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

好東西,現在都很好 –