Titanium Javascript: Как создать динамический EventListener? - PullRequest
1 голос
/ 12 февраля 2012

У меня есть массив кнопок, и я хочу добавить к каждому из них eventListener.

В eventListener я хочу получить значение ширины кнопки, которая нажата в данный момент.Как я могу это сделать?

for (i=0; i<5; i++) {
button[i].addEventListener(click, function(e) {
alert(/*How should I refer to THAT button*/)
})
}

1 Ответ

5 голосов
/ 12 февраля 2012

Внутри прослушивателя событий вы можете использовать this для ссылки на текущую кнопку:

for (var i=0; i<5; i++) {
    button[i].addEventListener('click', function(e) {
        alert( this ); // <-- This inside the event listener = current button
    });
}

Другой метод - заключить тело цикла в замыкание и создать локальную переменную:

for (var i=0; i<5; i++) {
    (function(button) { // <--- Local variable
        button.addEventListener('click', function(e) {
            alert( button );
        });
    })(button[i]);      // <-- Pass button
}

Вместо создания новой функции в каждом цикле вы также можете создать именованную функцию вне цикла:

function createButtonEvent(button) {
    button.addEventListener('click', function(e) {
        alert( button );
    });
}
for (var i=0; i<5; i++) {
    createButtonEvent(button[i]);
}
...