2013-05-18 3 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. Убедитесь, что вы передаете правильный идентификатор в 'setLoad' –

+0

Кроме того, сохраните возвращаемое значение getElementsById в var, вы используете много бесполезного времени для поиска dom для одного элемента –

ответ

5

Вы пропускают сам элемент dom (используя this), а не id.

Вы должны изменить код на

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

Ваш код не является безопасным, потому что вы не проверить, если у вас есть элемент DOM с заданным id

Вот почему вы получите ошибку: Cannot read property 'className' of null

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

И проблема проходит this если вы позвоните selectLoad. На данный момент является элементом DOM, а не строкой, которую ожидает ожидание: ... set by PHP per element .... Поэтому вам нужно соответствующим образом изменить код.

2

Я думаю, что вы передаете идентификатор, который не существует в dom. Домен загружен до того, как ваш javascript будет выполнен? Переместить скрипт в нижней части страницы непосредственно перед закрывающим HTML тега

EDIT: После обсуждения в комментариях ниже ошибки эта строка:

<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 не передает идентификатор вообще. Вызов проходит через элемент DOM. – zzzzBov

+0

да он есть. В selectElementById (id) id - это идентификатор! Проблема заключается в том, что идентификатор не является тем, который существует на элементе в dom –

+1

«Домен загружен до того, как ваш javascript будет выполнен?» если вы прочитали HTML, вы бы знали, что сценарий используется как обратный вызов onclick, что означает, что DOM определенно загружен. – zzzzBov

Смежные вопросы