Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / Javascript

JavaScript Triggering Event Manually in Internet Explorer 11, 10, 9

4.33/5 (2 votes)
3 Apr 2015CPOL2 min read 44.2K  
This tip is to show how to manually trigger events in JavaScript with cross browser compatibility.

Introduction

In this tip, we see how to trigger an event manually in plain vanilla JavaScript and how to do it in Internet Explorer which is different from others. Let's see that by making a simple example triggering a button event on window load using plain vanilla JavaScript.

Background

We get to few requirements where we need to trigger events manually after some pre processing in other events, so that we reduce code redundancy to rewrite the same trigger event code in same function rather we trigger manually that event which does the same work. Triggering events manually is a bit different in Internet Explorer from others, so we need to handle both to make our web application have same the experience across browsers. You can use jQuery to reduce browser redundancies. But in this tip, we see how to trigger using JavaScript across browsers.

Example

Let us have a button in our website which on click writes a welcome message in the document. But let's trigger it on window load event and manually trigger the button event.

In all other browsers, we initialize mouse event by instantiating a new MouseEvent(. , .). Internet Explorer doesn't support MouseEvent action. It throws an action not supported error. To initialize a mouse event, we need to follow two steps:

  1. Create a new event for document. 
  2. And initialize a mouse event on that created object.

For Internet Explorer (Which also works for Firefox)

JavaScript
var event = document.createEvent("MouseEvent");
event.initMouseEvent("click",true,true,window,0,0,0,0,0,false,false,false,false,0,null);

For others browsers, we just instantiate a new MouseEvent as below: (Non IE)

JavaScript
var event = new MouseEvent("click",{
        'view': window,
        'bubbles': true,
        'cancelable': true
});

The last step is the same for all browsers to trigger an event manually as follows (for all browsers including Internet Explorer):

JavaScript
//This will be same for all browsers only initialization differs
myButton.dispatchEvent(event)

The initMouseEvent method has many arguments, we mostly care about few, the eventType that is click in this case, the 2nd one is canBubble which is true so the event propagates upward, canCancelable i.e., default action can be canceled, fourth one is the view, i.e., is the current window. We don't use the rest much so let them have the same as the above values. You can get more context about initMouseEvent here.

HTML
JavaScript
<button id="myButton">Greet User</button>
JavaScript
JavaScript
window.onload=function(){
         var event;
         var myButton = document.getElementById("myButton");
         
         //Button click handler
         myButton.addEventListener("click",function(){
            document.write("Hello guest ! Welcome ? ");
         },false);
         
         
         //This is true only for IE,firefox
         if(document.createEvent){
         // To create a mouse event , first we need to create an event and then initialize it.
            event = document.createEvent("MouseEvent");
            event.initMouseEvent("click",true,true,window,0,0,0,0,0,false,false,false,false,0,null);
         }
         else{
             event = new MouseEvent('click', {
                        'view': window,
                        'bubbles': true,
                        'cancelable': true
                    });
         }
         
         myButton.dispatchEvent(event);
};

The above function on window load will trigger button click event and shows a popup.

Here's code pen demo.

Thanks for reading. :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)