Event Attributes, Event Handlers & Event Listeners
DOM elements, along with certain objects like the
document object, the
window object and the
XMLHttpRequest object, possess a set of
attributes, properties and methods to implement desired behaviour on
occurence of DOM events.
Consider a <button> element in the
document
<button>Click</button>
and declare a function called hello() that
alerts the message Hello! when
called/invoked
function hello() {
alert("Hello!");
}
1. Event Attributes
There are a set of attributes prefixed by "on" to the name of an
event that can be used on HTML elements to execute scripts on
trigger of events. They are known as
event attributes.
onclick,
onload,
onmouseover,
onfocus, etc are some examples of
commonly used event attributes. Below we add the
onclick event attribute to the
<button> element as shown below
<button onclick='hello()'>Click</button>
The function hello() gets executed
whenever the <button> element is
clicked.
To confirm that the onclick event has
been added as an attribute to the
<button> element, get the
onclick attribute by typing the
following line into the console
document.getElementsByTagName("button")[0].getAttribute("onclick");
and you will get the output as "hello()"
The use of event attributes however is not a recommended method anymore as Content Security Policy (CSP) implementation can block inline scripts.
2. Event Handlers
Adding an event attribute to an element creates a
corresponding property. In the above section, adding the
onclick event attribute to the
<button> element has also created
the corresponding onclick property. To
see what I mean, type the below line of code into the browser
console
document.getElementsByTagName("button")[0].onclick
You will find that the onclick property
has been assigned the hello() function
already
Now akin to event attributes, these properties also reacts to
events, to each of which a function can be assigned. These
properties are known as event handlers.
A function assigned to an event handler is executed on occurrence of
that event. Below we assign the existing
hello() function to the
onclick property of the
<button> element
document.getElementsByTagName("button")[0].onclick = hello;
We can also use an anonymous function in place of the
hello() function as
document.getElementsByTagName("button")[0].onclick = function(){alert("Hello!");};
Besides DOM elements, event handlers can also be used on objects
like window,
document,
XMLHttpRequest, etc. For example, the
onresize event handler is attached to
the window object as
window.onresize = function(){};
But as in the case of event attributes, setting a
property does not create the corresponding attribute. So if the
onclick='hello()' attribute-value pair
has been removed from the
<button> element, setting the
onclick property as
document.getElementsByTagName("button")[0].onclick = hello;
will not get us back the removed
onclick='hello()' attribute-value pair.
3. Event Listeners
An event can also be registered to the target element using the
addEventListener() method. It has the
following syntax
addEventListener(event, function, useCapture);
The event parameter, as the name itself
suggests, is the name of the event that is registered to the
targeted element. The function parameter
refers to the function to be called when the event occurs. The
useCapture parameter takes a Boolean
value according to the event being propagated is bubbled (false) or captured (true).
In the example below, we make use of the
addEventListener() function to register
the click event to the
<button> element, passing the
click event as the first parameter, the
existing hello() function as the second
parameter, and false as the third
parameter, setting the event for bubbling
document.getElementsByTagName("button")[0].addEventListenner('click', hello, false);
And as shown in the above sections, we can also use an anonymous
function in place of the existing
hello() function
document.getElementsByTagName("button")[0].addEventListenner('click', function(){
alert("Hello!");
}, false);