2010-08-30 168 views
1

在函數裏,我有:調用函數定義一個變量

var myType; 
if ($(this).is(".whatever")){ 
    myType = typeOne; 
} else if ($(this).is(".something")){ 
    myType = typeTwo; 
} 

這工作得很好。不過,我想把它變成一個我可以調用的獨立函數,因爲我在幾個不同的地方使用它。我寫的功能是:

function setMyType(){ 
    var myType; 
    if ($(this).is(".whatever")){ 
    myType = typeOne; 
    } else if ($(this).is(".something")){ 
    myType = typeTwo; 
    } 
} 

當我在我的主函數調用setMyType(),主要功能不能訪問的myType。如果我在setMyType()中警告(myType),則警報包含正確的值。但主要功能無法看到這個價值。

這是一個範圍問題,但我不知道如何解決它。我嘗試在main函數中定義myType並將其傳遞給setMyType()。雖然setMyType()從主函數中獲取myType的值很好,但它仍然不會將更改後的值返回給主函數。

+2

通過您的函數setMyType()無法解析$(this)的方式,您需要用其他jquery選擇器替換它。 – 2010-08-30 07:25:33

回答

4

你會從返回值功能,像這樣:

function getMyType(){ 
    var myType; 
    if ($(this).is(".whatever")){ 
    myType = typeOne; 
    } else if ($(this).is(".something")){ 
    myType = typeTwo; 
    } 
    return myType; 
} 

// elsewhere: 
var myType = getMyType(); 
+0

+1,儘管該方法可能更好地命名爲「getMyType」或類似的 – harto 2010-08-30 05:43:18

+0

好點,已編輯。 – 2010-08-30 05:57:48

+0

這樣做。我以爲我會盡早回覆價值,但我一定在某個地方犯了錯。 – motorfirebox 2010-08-30 09:55:56

0

將在全球範圍內myType(我加了一個「G」像全球前綴):

// in global scope 
var gMyType = null; 

function setMyType(){ 
    if ($(this).is(".whatever")){ 
    gMyType = typeOne; 
    } else if ($(this).is(".something")){ 
    gMyType = typeTwo; 
    } 
} 

NB:我認爲你需要改變$(this)部分

0

你可以把它在全球範圍內爲@RC建議,或者你可以將其定義是這樣的:

function setMyType(){ 
    if ($(this).is(".whatever")){ 
    document.window.gMyType = typeOne; 
    } else if ($(this).is(".something")){ 
    document.window.gMyType = typeTwo; 
    } 
} 

現在你可以從任何地方訪問網頁:

alert(document.window.myType); 
0

返回值可能是最好的解決辦法,但這裏是另一個。您可以將對象傳遞給作爲範圍函數的函數,並且您的值將被設置爲此對象的屬性。

function setMyType(scope){ 
    if ($(this).is(".whatever")){ 
    scope.myType = typeOne; 
    } else if ($(this).is(".something")){ 
    scope.myType = typeTwo; 
    } 
} 

這將用於像:

var scope = {}; 
setMyType(scope); 
//now scope.myType contains your value 

我不鼓勵你

此,如果你要加載外部腳本不污染全局命名空間的方法往往是做在你的情況下使用這種方法(返回值更有意義,更容易理解),但值得一提的是它。

0

除非函數在閉包內部設置,或者它是顯式將this設置爲事件處理程序元素的jQuery回調的一部分,否則您將需要避免依賴此函數,因爲它會引用自身。

function setMyType(obj){ 
    myType = ($(obj).is(".whatever"))?typeOne:(($obj).is(".something"))?typeTwo:null; 
    return myType; 
} 

--a小三元好measure--你要知道這將是剛剛在這種情況下很容易,如果對象確實含有這在閉合,您只需設置this.myType = setMyType(this),如果你返回值,就會將其作爲對象屬性。

+0

在實際的代碼中,我有var = =(this),並且在我調用的函數中使用'that'。 – motorfirebox 2010-08-30 09:58:23