строк в JavaScript являются неизменными. когда вы делаете что-то вроде:
$("createform_result").innerHTML += "<a href=\"#\" id=\"newtlslic-"+response.tlsid+"\"><img src=\'/media/com_supportarea/images/download_small.png\' /></a> <em>TLS</em>";
вы ссылаетесь на innerHTML как строку. то, что это делает, это выбирает свойство в строку, объединяет его с другими передаваемыми строками и затем возвращает новую строку в конце, которая устанавливается как innerHTML.
при этом вы ЗАПИСЫВАЕТЕ содержимое элемента каждый раз, для каждой итерации.
события, прикрепленные к элементам, не выполняются обработчиком универсального идентификатора - они полагаются на элемент, находящийся в DOM, затем читается UID элемента (внутреннее свойство mootools присваивает всем переданным элементам) и добавляется обратный вызов события в хранилище элементов за этим UID.
Вы можете увидеть эту работу, выполнив console.log(element.retrieve("events"));
если переписать innerHTML, внутренний элемент воссоздается и получает НОВЫЙ UID, что означает, что обратный вызов теперь указывает на пустой указатель, поскольку UID является ключом в хранилище элементов.
Возможно, я ошибаюсь из-за того, что вы здесь делаете, так как на самом деле я не вижу бит, где вы переписываете его снова, но, вероятно, в коде, который вы удалили, есть такой, особенно если вы запускаете цикл.
лучший способ справиться с этим - это другое - использовать делегирование событий.
это может позволить вам добавить событие click к родительскому элементу вместо некоторого селектора. это будет работать для ЛЮБОГО элемента, добавленного любым способом в любое время, которое совпадает.
например.
// add this once, outside the loop
$("createform_result").addEvent("click:relay(a.editLink)", function(event, element) {
console.log(this === element);
console.log(this === event.target);
console.log(this.get("data-id"));
});
// then as you loop the results, just inject the els or use innerHTML or whatever...
new Element("a.editLink", {
html: '<img src=\'/media/com_supportarea/images/download_small.png\' /></a> <em>TLS</em>',
"data-id": response.tlsid
}).inject($("createform_result"));
Делегирование событий теперь является частью ядра mootools в 1.4.0 или в предыдущих версиях mootools-more.
веселись!