Самый простой (и, возможно, не самый быстрый или лучший) способ выглядит примерно так:
Element.live = function(evType, evSelector, evBlock) {
var mySelector = evSelector;
var myBlock = evBlock;
this.observe(evType, function(ev) {
if (ev.target.match(mySelector)) {
evBlock(ev);
}
});
};
Параметры evSelector и evBlock назначаются локальным переменным, поэтому они доступны обработчику событий (это закрытие). Переданный блок evBlock получает переданный объект события точно так же, как обычный обработчик события Prototype.
Следует отметить, что это будет обрабатывать каждое событие типа 'evType', поэтому если это mouseMove / mouseOver, это замедлит вашу страницу. Также FireBug, вероятно, просто уснет на вас из-за количества событий, которые он должен пройти за один шаг.
РЕДАКТИРОВАТЬ: Изменено в соответствии с комментариями