2016-02-23 37 views
-1

我設法讓代碼在條件滿足時使用函數更改按鈕的類。問題是我不想爲所有元素重複此操作,但在使用document.getElementById('buy'+gen)而不是document.getElementById('buyhotdog')時不起作用。我將在下面提供「工作代碼」和我嘗試工作的代碼。getElementById(「...」)。當試圖使用字符串+變量作爲編號時,className爲空

工作代碼:

function changeButtonHD() { 
    if (money < hotdog.cost) { 
     document.getElementById('buyhotdog').className = 'buttongrey'; 
    } 
    else { 
     document.getElementById('buyhotdog').className = 'button'; 
    } 
} 

,並與工作原理:changeButtonHD();在與在window.onload激活間隔。

非工作代碼:

function changeButtonBC(gen) { 
    if (money < gen.cost) { 
     document.getElementById('buy'+gen).className = 'buttongrey'; 
    } 
    else { 
     document.getElementById('buy'+gen).className = 'button'; 
    } 
} 

我試圖讓它與changeButtonHD(hotdog);

+4

你缺少引號'changeButtonHD(「熱狗」);' 。一方面只使用'hotdog'應該拋出一個錯誤,即'hotdog'沒有被定義,或者如果被定義了,那麼名爲'hotdog'的變量的內容很可能不是'hotdog'的值。 –

+2

你確定'gen'是正確的使用方法嗎,因爲你既檢查'gen.cost',然後把_just_'gen'附加到''buy'''? –

+3

簡單調試:'console.log('buy'+ gen)' - 這是什麼給你...? – deceze

回答

2

在這裏工作:gen.cost你展示gen是一個叫cost屬性的對象。

這裏:'buy'+gen你使用get就好像它是一個字符串。除非你重寫了.toString()那麼它將是"[object Object]"這不是"hotdog"

您似乎試圖使用最初保存您傳遞給changeButtonHD的值的變量的名稱,但您不能(因爲您傳遞了它的值而不是它的名稱)。

"hotdog"設爲該對象的屬性值,然後使用'buy' + gen.name

+0

gen只是一個佔位符,我注意到我已經在錯誤的方向上處理了這個問題。我想讓功能changeButtonBC適用於多個對象,任何提示如何實現? – veix

+0

@veix - 正如我在答案中所說的那樣。 – Quentin

+0

啊,現在我明白了,它的工作原理!非常感謝!這是簡單的解決方案,但我想有時候你需要別人來指出它! – veix

1

根類型爲對象,因此,如果你想獲得創價值,你的根變量格式應該喜歡這個

gen = {cost =1000, value=hotdog} //here an example of your data 

function changeButtonBC(gen) { 
if (money < gen.cost) { 
    document.getElementById('buy'+gen.value).className = 'buttongrey'; 
} 
else { 
    document.getElementById('buy'+gen.value).className = 'button'; 
} 

}

+0

這是我想要做的,但如何使它,所以我不需要在調用函數之前提供對象名稱?我想將它用於多個對象。 – veix