Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.07.2016, 15:41
Новичок на форуме
Отправить личное сообщение для lennaganci Посмотреть профиль Найти все сообщения от lennaganci
 
Регистрация: 25.07.2016
Сообщений: 1

не пойму как вызвать правильный номер элемента при клике
Помогите пожалуйста, при нажатии на Див должен в консоль передаться порядковый номер его, а передается всегда максимум

<html>
<body>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<script type="text/javascript">
var items = document.querySelectorAll('.item');
for (var i = 0, max = items.length; i < max ; i++) {
var element = items[i];
element.addEventListener('click', function() {
console.log('you clicked on ' + i);
});
}
</script>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 25.07.2016, 15:49
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

lennaganci,

document.onclick = function(e) {
  if ( e.target.classList.contains('item') )
    console.log(e.target.innerText);
};
Ответить с цитированием
  #3 (permalink)  
Старый 25.07.2016, 16:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

lennaganci,
1 вариант заменить for на [].forEach.call
2 вариант прочитать документацию
Ответить с цитированием
  #4 (permalink)  
Старый 26.07.2016, 14:37
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

i - это переменная и к концу цикла она принимает значение, которое и выводится по щелчку. Чтобы быстро понять как это получается, надо убрать цикл:

var i = 5;

element.addEventListener('click', function() {console.log('you clicked on ' + i);});

После щелчка выведется 5. ОК. Теперь какая-то функция ниже меняет i

i = 'I will be back';

Теперь после щелчка на том же диве (на любом) будет

I will be back
Ответить с цитированием
  #5 (permalink)  
Старый 26.07.2016, 14:43
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

А этот forEach.call просто копирует i в кложу (внутрь другой функции). Геморрой, просто индексируй элементы и затем в любой момент получишь его нумер:

for(var i=0, el, el=elems[i];i++)
    el.setAttribute('data-index',i);

parentOfElements.addEventListener('click',function(e){
    if(this!==e.target) /* щелкнули по самому отцу */
        console.log(e.target.getAttribute('data-index'));
});




Это же html.

Последний раз редактировалось warren buffet, 26.07.2016 в 14:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удается получить значение элемента таблицы при клике на соседнюю ячейку yakim Элементы интерфейса 5 07.04.2016 14:06
При клике менять стайл элемента до другого клика jei Общие вопросы Javascript 5 02.05.2013 17:34
Как сделать дополнительное перенаправление при клике по скрипту Igorbek Общие вопросы Javascript 1 08.08.2012 14:35
Изменение фона элемента при клике. psydo Элементы интерфейса 8 28.06.2012 23:53
Как отменить прокрутку при клике Alekson jQuery 1 30.03.2009 20:53