2010-10-29 44 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