Вывод «текущего» состояния переменной в событии mootools даже после изменения var - PullRequest
0 голосов
/ 29 октября 2010

Давайте возьмем некоторый псевдо-код Mootools:

for loop (i) from 0 to 5 {
    create.element {
        id: 'element_'+i
    }
    $('element_'+i).addevent.click {
        alert(i);
    }
}

События добавляются в элементы правильно.Однако при нажатии все они будут предупреждать последний итератор ... который будет равен 5.

Есть ли способ изменить "alert (i)" в событии, чтобы предупредить итератор в этой точкевовремя?

.toString мало что сделал.

1 Ответ

2 голосов
/ 30 октября 2010

http://www.jsfiddle.net/dimitar/sbytJ/1/

for (var ii = 0; ii < 5; ++ii) {
    new Element("div#id_" + ii + ".monkey[text=click me]").store("id", ii).addEvent("click", function() {
        alert(this.retrieve("id") + " id: " + this.get("id"));
    }).inject(document.body);

}

с использованием хранилища элементов (element.store("id", ii) / this.retrieve("id")) является одним из способов обеспечения правильной привязки значения во время выполнения ...

другим способом черезанонимная функция: http://www.jsfiddle.net/dimitar/sbytJ/2/

for (var ii = 0; ii < 5; ++ii) {
    (function(id) {
        new Element("div#id_" + id + ".monkey[text=click me]").addEvent("click", function() {
            alert(id);
        }).inject(document.body);
    })(ii);
}

и т. д. и т. д. Я уверен, что есть и другие способы рефакторинга, также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...