2016-02-04 1 views
0

Я попытался найти способ решить мою проблему, чтобы добавить класс в div, когда я нажимаю на них, но я не могу заставить его работать.Добавление класса в div с помощью функции onclick

var el = document.getElementsByClassName('applications'); 
var i; 
for (i = 0; i < el.length; i++) { 
    el[i].addEventListener("click", function() { 
    if (el[i]) { 
     el[i].className += el[i].className ? ' openDiv' : 'openDiv'; 
    } 
    }); 
} 

У меня есть «цикл», потому что я использовал getElementsByClassName, который дает список узлов. Я также создал codepen пример:

http://codepen.io/anon/pen/dGqmMy

+1

Это выглядит подозрительно, как вы будете иметь проблемы с закрытием, если вы предупредите значение 'i' в вашем методе вы можете найти его всегда' el.length' или undefined – NibblyPig

+1

внутри 'addEventListener',' el [i] 'не определено (при нажатии). на самом деле. –

+1

https://jsfiddle.net/arunpjohny/Lo2zrsqs/2/ –

ответ

3

Вместо того чтобы использовать сложные манипуляции строки, используйте classList:

el[i].classList.add('openDiv'); 

Я считаю, что вам может понадобиться добавить закрытие для eventListeners работать.

Таким образом, это будет рассматриваться как решение:

var el = document.getElementsByClassName('applications'); 
var i; 
for (i = 0; i < el.length; i++) { 
    (function (i) { 
    el[i].addEventListener("click", function() { 
     if (el[i]) { 
     el[i].classList.add('openDiv'); 
     } 
    }); 
    })(i); 
} 
+1

Я не думаю, что это все равно ответит на проблему ... может быть предложение сделать существующий код лучше ... –

+0

@ArunPJohny Я был ... Хорошо .. Я предлагал правильный путь, потому что это может не сработать. Я также сказал, что использование закрытий будет работать. Но не предоставили код. –

+0

@PraveenKumar, я думаю, 'if (el [i]) {' здесь не играет никакой роли, возможно, добавляет путаницу. – Rayon

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