Cá nhân tôi sử dụng chức năng bao bọc để xử lý các sự kiện được tạo thủ công. Đoạn mã sau sẽ thêm một phương thức tĩnh trên tất cả các Event
giao diện (tất cả các biến toàn cục kết thúc bằng Event
giao diện Sự kiện) và cho phép bạn gọi các hàm như element.dispatchEvent(MouseEvent.create('click'));
trên IE9 +.
(function eventCreatorWrapper(eventClassNames){
eventClassNames.forEach(function(eventClassName){
window[eventClassName].createEvent = function(type,bubbles,cancelable){
var evt
try{
evt = new window[eventClassName](type,{
bubbles: bubbles,
cancelable: cancelable
});
} catch (e){
evt = document.createEvent(eventClassName);
evt.initEvent(type,bubbles,cancelable);
} finally {
return evt;
}
}
});
}(function(root){
return Object.getOwnPropertyNames(root).filter(function(propertyName){
return /Event$/.test(propertyName)
});
}(window)));
EDIT: Hàm tìm tất cả các Event
giao diện cũng có thể được thay thế bằng một mảng để chỉ thay đổi các giao diện Sự kiện bạn cần ( ['Event', 'MouseEvent', 'KeyboardEvent', 'UIEvent' /*, etc... */]
).