1

我有一个关于 Mootools 事件处理的问题......

有一种情况,您有一个循环,并且为每个循环创建一个 div 并在其上附加一个事件。它总是取循环的最后一个循环的值。

喜欢:

for(var i=0;i<10;i++) {
 var el = new Element('div').inject($(document.root));
 el.addEvent('click',function() {
  alert(i); 
 });
}

所有元素都会发出“10”警报。我想要的是让每个新元素都计数+1。第一=0,第二=1,...

希望有人明白我的意思。提前谢谢!

4

2 回答 2

1

在添加到局部变量时使用闭包来封装迭代器:

for(var i=0;i<10;i++) {
    var el = new Element('div').inject($(document.root));
    (function(i){    
        el.addEvent('click',function() {
            alert(i); 
        });
    }(i));
}

学派说你不应该在循环中创建函数。

您可以做的其他事情是将迭代器传递给构造函数并将其保存在存储中:

var el = new Element('div').store('index', i).inject(document.body);
...
click: function(){
    console.log(this.retrieve('index'));        
}

您还可以使用 a.each自动为您执行迭代器:

var a = new Array(10);
a.forEach(function(item, index){
    new Element('div', {
        events: {
            click: function(){
                alert(index);
            }
        }
    }).inject(document.body);
});

你也可以将它绑定到回调......很多很多模式。

于 2013-06-26T08:55:45.703 回答
0

找到了解决方法,不确定它是否符合您的要求。

在这里检查小提琴

JS/Mootools:

for(var i=0;i<10;i++) {
 var el = new Element('div', {onclick: 'alert('+i+')',text:i}).inject(document.body);
}
于 2013-06-26T08:50:35.450 回答