Bir jQuery olay işleyicisini, önceden eklenmiş olay işleyicilerinden önce işleyicinin tetikleneceği şekilde eklemenin bir yolu var mı? this article ile karşılaştım, ancak kod çalışmadı çünkü olay işleyicileri bir dizide saklanmadı, bu da kodunun beklendiği gibi. Ne istediğimi yapmak için bir jQuery uzantısı oluşturmak için çalıştı, ama bu (olaylar hala ciltlenmiş sırayla ateş) çalışmıyor:jQuery olay işleyicileri, ilk olarak tetiklenecek şekilde ekleme
$.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]);
}
}
});
}
});
olay ele yeniden sıralamak için bir doğal yolu var mı? Eğer yoksa, başvurabileceğim tekniğini biliyor musun? Ben jQuery 1.4.1 kullanıyorum, ama eğer yükseltmeliyim eğer yükseltmeliyim.
Önce, tüm self.bind (tür, işleyici) çağrılarını bir diziye depolamanız gerekir; çünkü bağlama, bu işlevin yeni bir örneğini oluşturuyordur. – rxgx