2010-10-29 88 views
0

即使我们采取一些伪代码MooTools的:呼应的mootools的事件“然后”变量的状态变种已经改变

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

事件被添加到正确的元素。然而,点击时,他们都会提醒最新的迭代器...这将是5.这将是5.

有什么办法可以改变“警报(i)”在事件中提醒迭代器在那个时间点?

.toString没有太大的作用。

回答

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

等等我相信还有其他的方法来重构这也

+0

谢谢Dimitar - 我最终用匿名函数去工作 - 效果很好!...现在我学到了一些新的东西...... – 2010-12-13 15:43:53