Редактировать: это может быть полезно, но может не работать, как того требует вопрос ОП.Обработчик, который запускается на one
, не присоединяется к концу текущей очереди обработчика, он работает только на последующих событиях.
Для будущих читателей вы можете добиться этого, передавая обработчик, используяone()
.
$('.some-class').on('anevent', function(evt) {
$(this).one(evt.type, function(evt) {
//this code will fire after all other handlers for this event, except others that are proxied the same way
console.log(evtO == evt, 'same event');
if (evt.isDefaultPrevented())//can check signals to see whether you should still handle this event
return;
//do stuff last
});
})
Позже где-нибудь еще:
$('.some-class').on('anevent', function(evt) {
//do stuff first
evt.preventDefault();//can signal to prevent the proxied function. could use evt.stopPropagation() instead
})
Единственное предостережение в том, что если более поздний обработчик использует return false;
или stopImmediatePropagation()
, функция связана сone()
вызовет first в следующий раз, когда произойдет это событие, если только вы явно не отсоедините его.