Я использую обработчики событий из фреймворка (точнее, прототипа), чтобы прикрепить слушателей к определенным элементам страницы, например:
//html
<a href="?default=1" class="default">Set Default</a>
//js
document.observe('dom:loaded', function(){
//get all elements with d 'default' classname
for(i = 0;i < document.getElementsByClassName('default').length;i++)
{
s = document.getElementsByClassName('default')[i];
//attach an onclick event
s.observe('click', function(e){
//prevent the default action (i.e loading the page)
e.preventDefault();
//read d link attribute
ref = this.readAttribute('href');
//and now, do it the ajax way
new Ajax.Request('js/ajax/handler.php'+ref, {
method:'get',
onSuccess:function(transport){}
});
});
}
});
Это работает хорошо. Действительно хорошо. Но есть проблема. В большинстве случаев такие действия манипулируют DOM и могут добавить один или несколько элементов класса «по умолчанию» (например, где-то еще установить значение по умолчанию). Это намеренно на самом деле. Но тогда к недавно добавленному элементу класса «по умолчанию» не будет прикреплено событие щелчка. На данный момент дерьмовая работа заключается в том, чтобы снова перебрать все классы «по умолчанию» и повторно прикрепить события. Любые другие идеи?