У меня есть список объектов, каждый из которых имеет .bullet, который является SPAN. Я хочу привязать клик по пролету к обработчику, чем выполнить определенное действие на span с помощью jQuery. Я вижу какое-то поведение, которое я не понимаю, поэтому я надеюсь, что кто-то сможет объяснить, что происходит. В основном, это первый пример кода работы:Закрытие JavaScript для обработчика событий jQuery
for (var i = 0 ; i< length ; i++) {
(function(){
dataNode = dataNodeList[i];
var handler = function(e) {
e.data.node.bullet.firstChild.nodeValue = "- ";
};
$(dataNode.bullet).on("click",{node:dataNode},handler);
})();
}
Однако этот второй вариант не работает:
for (var i = 0 ; i< length ; i++) {
(function(){
dataNode = dataNodeList[i];
var handler = function() {
dataNode.bullet.firstChild.nodeValue = "- ";
};
$(dataNode.bullet).on("click",handler);
})();
}
В этом втором примере,
dataNode.bullet.firstChild.nodeValue = "- ";
не оказывает никакого влияния на величину SPAN, который я планировал. Я ожидал, что dataNode.bullet все равно укажет на SPAN, который я хочу изменить из-за закрытия JavaScript. Итак, может кто-нибудь объяснить, почему это не удается? Благодарю.
Две вещи: объявить «dataNode» в этой функции с помощью «var» и передать «i» этой вызываемой функции в цикле. (Конечно, добавьте «i» в свой список параметров.) – Pointy
Возможный дубликат [Назначить обработчики кликов в цикле цикла] (http://stackoverflow.com/questions/4091765/assign-click-handlers-in-for-loop) - это очень распространенная проблема, поскольку природа поведения не очевидна. – Pointy
Ах. Спасибо за указание, что я забыл объявить переменную внутри цикла. –