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 Eventinterfaces (todas las variables globales que terminan en Eventuna 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 Eventinterfaces también se puede reemplazar por una matriz para alterar solo las interfaces de eventos que necesita ( ['Event', 'MouseEvent', 'KeyboardEvent', 'UIEvent' /*, etc... */]).