2013-05-18 131 views
0

我想要做的就是在單擊時按ID切換元素的類。JS元素的更改類

<script> 

function selectLoad(id) 
{ 
    if(document.getElementById(id).className == "load") { 
     document.getElementById(id).className = "loadSelected"; 
    } else { 
     document.getElementById(id).className = "load"; 
    } 
} 

</script> 

<div class="load" id=" ... set by PHP per element ... " onclick="selectLoad(this)"> 

這將返回一個錯誤......

Uncaught TypeError: Cannot read property 'className' of null

所以我想它不喜歡的條件。

我是JS新手,需要幫助,提前致謝。

+1

[檢查出來(http://stackoverflow.com/questions/195951/change-an-elements-css-class-with-javascript) – jmeas

+1

' document.getElementById(id)'返回null。確保你傳遞了正確的ID到'setLoad' –

+0

另外,將getElementsById的返回值保存在一個var中,你使用很多無用的時間搜索一個元素的dom –

回答

5

你通過dom元素本身(使用this),而不是id

您應該修改代碼,

function selectLoad(element) 
{ 
    if (element.className == "load") { 
     element.className = "loadSelected"; 
    } else { 
     element.className = "load"; 
    } 
} 
0

你的代碼是不是安全的,因爲你不檢查,如果你有給定id

這是DOM元素,爲什麼你的錯誤:Cannot read property 'className' of null

if(document.getElementById(id)) { 
    // ... do something and do not go further. 
    return; 
} 

,問題就通過this當您撥打selectLoad。此時,this是DOM元素,而不是您期望的字符串:... set by PHP per element ...。所以你必須相應地改變代碼。

2

我認爲你傳遞了一個在dom中不存在的id。在執行JavaScript之前是否已經加載了dom?剛剛閉幕的HTML標記之前移動腳本到頁面底部

編輯:按照錯誤下面的評論討論這一行:

<div class="load" id=" ... set by PHP per element ... " onclick="selectLoad(this)"> 

應改爲

<div class="load" id=" ... set by PHP per element ... " onclick="selectLoad(this.id)"> 
+1

OP根本沒有傳遞一個ID。該調用正在傳入一個DOM元素。 – zzzzBov

+0

是的,他是。在selectElementById(id)中,id是一個id!問題是這個id不是在dom中的一個元素上存在的 –

+1

「在執行javascript之前是否加載了dom?」如果你閱讀過HTML,你就會知道腳本被用作'onclick'回調函數,這意味着DOM已經被加載。 – zzzzBov