Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2020, 16:07
Аспирант
Отправить личное сообщение для AleksSergSB Посмотреть профиль Найти все сообщения от AleksSergSB
 
Регистрация: 20.11.2016
Сообщений: 74

Запомнить значение "динамической" переменной в функции
Лучше это пояснить на примере.
Есть массив элементов. К каждому из них нужно повесить свой обработчик. В обработчике нужно знать какой это элемент, хотя бы в порядке очереди.
Так как обработчики подключаю следующим способом:
const itemArray = document.getElementsByClassName('item');
for(i=0; i<itemArray.length; i++) {
	itemArray[i].onclick = function (){
		что-то делаем..
}
Подумал, что может быть есть возможность сохранить этот самый "i" на этапе привязки обработчиков. Чтобы внутри обработчика знать хотя бы его порядковый номер.

Уже читал про замыкания, но что-то не пойму возможно ли такое замыканием реализовать. Как ни крутил, не получается(
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2020, 16:15
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

const itemArray = document.getElementsByClassName('item');
for(i=0; i<itemArray.length; i++) {
	itemArray[i].onclick = (function (i){ 
        return function (){
            // что-то делаем...
        };
    })(i);
}

// или так
document.querySelectorAll('.item').forEach((node, index) => {
    node.addEventListener('click', e => {
        // что-то делаем...
    });
});
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2020, 16:26
Аспирант
Отправить личное сообщение для AleksSergSB Посмотреть профиль Найти все сообщения от AleksSergSB
 
Регистрация: 20.11.2016
Сообщений: 74

Спасибо большое! Оказывается все просто)
Ответить с цитированием
  #4 (permalink)  
Старый 21.05.2020, 16:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

AleksSergSB,
for(let i=0; i<itemArray.length; i++)
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
     .item {
         width: 50px;
         height: 50px;
         background-color: #2320CC;
         margin: 5px;
     }

    </style>



</head>
<body>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<script>
const itemArray = document.getElementsByClassName('item');
for(let i=0; i<itemArray.length; i++) {
    itemArray[i].onclick = function (){
       alert(i);
    }
}

  </script>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 21.05.2020, 17:12
Аспирант
Отправить личное сообщение для AleksSergSB Посмотреть профиль Найти все сообщения от AleksSergSB
 
Регистрация: 20.11.2016
Сообщений: 74

Сообщение от рони Посмотреть сообщение
AleksSergSB,
for(let i=0; i<itemArray.length; i++)
Да да! Конечно! Это для примера быстро набирал)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать только значение переменной из функции Retro_1477 jQuery 3 18.08.2018 13:25
AJAX Запрос - не могу добраться до значения переменной вне функции thc2000 AJAX и COMET 6 13.07.2018 17:47
Значение переменной из другой функции Asrover jQuery 3 28.08.2014 17:19
Как получить значение переменной из игры на HTML5? Dimaz Общие вопросы Javascript 6 10.08.2014 16:27
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25