Как использовать замыкания для создания прослушивателей событий в цикле Javascript for?
HTML
<span class="char" id="0">?</span>
<span class="char" id="1">!</span>
<span class="char" id="2">"</span>
<span class="char" id="3">/</span>
<span class="char" id="4">%</span>
<span class="char" id="5"><span class="char" id="0">?</span>
<span class="char" id="1">!</span>
<span class="char" id="2">"</span>
<span class="char" id="3">/</span>
<span class="char" id="4">%</span>
<span class="char" id="5">$</span>
...
lt;/span>
...
JavaScript
var charElems = document.getElementsByClassName('char');
for (var i=0; i < charElems.length; i++) {
charElems[i].addEventListener('mouseover',function() {
(function(j) {mouseoverCheck(j);}(i));
});
}
У меня есть куча (сотни)span
элементы с номерами в качестве идентификаторов (начиная с 0 и увеличивая на 1). Предполагается, что этот цикл должен создавать прослушиватели событий mouseover для всехspan
элементы (которые все имеют классchar
). После того, как муссированный, он должен извинитьmouseoverCheck()
функционировать и передавать в любомi
был когда этот слушатель события был создан. Таким образом, слушатель 203-го события должен передать203
, Но это не так. Прямо сейчас, это проходит в то, что я считаю, является последним значениемi
был до завершения цикла.
Я пытался использовать IIFE и закрытие, чтобы убедиться, что каждый слушатель события получилi
Значение в момент его создания, а не значение при вызове функции. Очевидно, я не сделал это правильно, но я уверен, что закрытие является ключом к моей проблеме. Может кто-нибудь пролить свет на то, как это сделать правильно? Я думал, что понял закрытие, но ясно, что я не ...