Có cách nào để đính kèm một trình xử lý sự kiện jQuery sao cho trình xử lý được kích hoạt trước mọi trình xử lý sự kiện được đính kèm trước đó không? Tôi đã xem qua this article, nhưng mã không hoạt động vì trình xử lý sự kiện không còn được lưu trữ trong một mảng nữa, đó là những gì mã của anh ta mong đợi. Tôi đã cố gắng để tạo tiện ích jQuery để làm những gì tôi muốn, nhưng điều này không làm việc (sự kiện vẫn bắn theo thứ tự chúng được ràng buộc):Gắn các trình xử lý sự kiện jQuery để chúng được kích hoạt đầu tiên
$.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]);
}
}
});
}
});
Có tự nhiên cách để sắp xếp lại các sự kiện xử lý? Nếu không có, bạn có biết về kỹ thuật tôi có thể áp dụng không? Tôi đang sử dụng jQuery 1.4.1, mặc dù tôi sẽ nâng cấp nếu tôi phải.
Trước tiên, bạn phải lưu trữ tất cả các lệnh 'self.bind (type, handler)' vào một mảng vì ràng buộc là tạo một thể hiện mới của hàm đó. – rxgx