Personalmente uso una función de contenedor para manejar eventos creados manualmente. El siguiente código agregará un método estático en todas las Event
interfaces (todas las variables globales que terminan en Event
una interfaz de Evento) y le permitirá llamar a funciones como element.dispatchEvent(MouseEvent.create('click'));
en 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)));
EDITAR: La función para buscar todas las Event
interfaces también se puede reemplazar por una matriz para alterar solo las interfaces de eventos que necesita ( ['Event', 'MouseEvent', 'KeyboardEvent', 'UIEvent' /*, etc... */]
).