2013-08-07 122 views
0

我寫了一個帶參數的函數,我試圖調用該函數。不過,我不斷收到「未捕獲引用錯誤:‘’沒有定義函數未捕獲的參考錯誤:函數未定義javascript

這裏是我的代碼:

var bColor, fColor, fStyle, bUrl; 
jQuery(function changeBackground(bColor, fColor, fStyle, bUrl) { 
    if (typeof (bColor) === 'undefined') bColor = '#fff'; 
    if (typeof (bUrl) === 'undefined') bUrl = ''; 
    if (typeof (fColor) === 'undefined') fColor = '#000'; 
    if (typeof (fStyle) === 'undefined') fStyle = 'Monda'; 
    WebFontConfig = { 
     google: { families: [ fStyle ] } 
    }; 
    (function() { 
     var wf = document.createElement('script'); 
     wf.src = ('https:' == document.location.protocol ? 'https' : 'http') + 
      '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js'; 
     wf.type = 'text/javascript'; 
     wf.async = 'true'; 
     var s = document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(wf, s); 
    })(); 
    jQuery('body').css({ backgroundColor: bColor, backgroundUrl: bUrl, color: fColor, fontFamily: fStyle }); 
}); 

我得到的錯誤,無論我是否從腳本或者,如果運行的功能。我通過任何元素的調用如onload事件中運行它。

我不知道爲什麼我收到的錯誤也許另一雙眼睛能發現我的錯誤。

+1

您沒有聲明可從其他位置訪問的函數。我猜你指的是你的'changeBackground'「功能」。您正在調用'jQuery'函數,並將其傳遞給名爲'changeBackground'的命名函數表達式。這裏唯一可以訪問'changeBackground'的地方是**裏面的**。這是你唯一的代碼嗎? – Ian

+0

是的。那真是令人尷尬。那不是我想要達到的。我如何使其全球可訪問? –

+0

別擔心,一點都不尷尬!所以,只要刪除'jQuery('在開頭和''''結束它所有,所以它將成爲一個函數聲明。只要此代碼位於全局範圍內,它將在全局範圍內聲明。如果你想在文檔準備好的時候調用它,那麼使用'$(document).ready(function(){changeBackground(params ...);});' – Ian

回答

0

當你傳遞一個函數給jQuery對象像$(fn)與相同。你的第一個參數bColor實際上是jQuery。您可能想要的是將所有內容都包含在ready事件中,並在該封閉內使用$

jQuery(function($){ 

    // use `$` from now on instead of `jQuery` 

    var bColor, fColor, fStyle, bUrl; 

    function changeBackground() { 
    ... 
    } 

}); 
+0

試過了。甚至沒有運行我的代碼。 –

相關問題