@OVK2015

Как в jQuery установить свой обработчик первым, если у эл-та уже есть другие на это же событие?

Доброго времени суток!
Есть необходимость добавлять свой обработчик к определенному элементу. До этого момента у эл-та уже есть есть один/несколько обработчиков для этого же события. Как сделать так, чтобы мой обработчик(добавляется последним) получал управление первым из всех обработчиков для этого события на этом эл-те?

Чего-то путного нагуглить не получилось. Пока так выкрутился:

// $('#parent').prepend($('<button id="handlersQueue">Нажми меня</button>'))
$('#handlersQueue').unbind('click');

function handler_1(event){console.log('handler_1');}
function handler_2(event){console.log('handler_2');}
function handler_3(event){console.log('Должен быть первым');}
$('#handlersQueue').bind('click', handler_1).bind('click', handler_2);

console.log('!!!!! До');
$('#handlersQueue').trigger('click');

var oldHandlers = [];
var handlers = $._data($('#handlersQueue').get(0), 'events');
handlers.click.forEach(function(item)
{
   oldHandlers.push(item.handler);   
});
$('#handlersQueue').unbind('click');
$('#handlersQueue').bind('click', handler_3);
oldHandlers.forEach(function(item)
{
    $('#handlersQueue').bind('click', item);
})
handlers = null;

console.log('!!!!! После');
console.log('handlers: ' + handlers);
$('#handlersQueue').trigger('click');


Есть у jQuery что-нибудь свое, родное для этих целей?
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
$.fn.bindFirst = function(name, fn) {
    this.on(name, fn);

    this.each(function() {
        var handlers = $._data(this, 'events')[name.split('.')[0]];
        var handler = handlers.pop();
        handlers.splice(0, 0, handler);
    });
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы