即使在var发生变化之后,也会在mootools事件中回应变量的“then”状态

时间:2010-10-29 18:49:48

标签: javascript variables mootools

我们来看一些伪Mootools代码:

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

事件会正确添加到元素中。但是,当点击它们时,它们都会提醒最新的迭代器......这将是5。

有什么方法可以在事件中更改“alert(i)”以在那个时间点提醒迭代器?

.toString做得不多。

1 个答案:

答案 0 :(得分:2)

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);
}

等等。我相信还有其他方法可以重构这个