Есть ли способ связать обработчик событий jQuery таким образом, чтобы обработчик запускался перед любыми ранее прикрепленными обработчиками событий? Я наткнулся на эту статью, но код не работал, потому что обработчики событий больше не хранятся в массиве, что и ожидал его код, Я попытался создать расширение jQuery, чтобы делать то, что хотел, но это не работает (события все еще срабатывают в том порядке, в котором они были связаны):
$.fn.extend({
bindFirst: function(type, handler) {
var baseType = type;
var dotIdx = type.indexOf('.');
if (dotIdx >= 0) {
baseType = type.substr(0, dotIdx);
}
this.each(function() {
var oldEvts = {};
var data = $.data(this);
var events = data.events || data.__events__;
var handlers = events[baseType];
for (var h in handlers) {
if (handlers.hasOwnProperty(h)) {
oldEvts[h] = handlers[h];
delete handlers[h];
// Also tried an unbind here, to no avail
}
}
var self = $(this);
self.bind(type, handler);
for (var h in oldEvts) {
if (oldEvts.hasOwnProperty(h)) {
self.bind(baseType, oldEvts[h]);
}
}
});
}
});
Есть ли естественный способ изменить порядок обработки событий? Если нет, знаете ли вы, какую технику я мог бы применить? Я использую jQuery 1.4.1, хотя я обновляюсь, если должен.