Element: click event

An element receives a click event when a pointing device button (such as a mouse's primary mouse button) is both pressed and released while the pointer is located inside the element.

If the button is pressed on one element and the pointer is moved outside the element before the button is released, the event is fired on the most specific ancestor element that contained both elements.

click fires after both the mousedown and mouseup events have fired, in that order.

Syntax

Use the event name in methods like addEventListener(), or set an event handler property.

addEventListener('click', (event) => {});

onclick = (event) => { };

Event type

Event properties

This interface also inherits properties of its parents, UIEvent and Event.

MouseEvent.altKey Read only

Returns true if the alt key was down when the mouse event was fired.

MouseEvent.button Read only

The button number that was pressed (if applicable) when the mouse event was fired.

MouseEvent.buttons Read only

The buttons being pressed (if any) when the mouse event was fired.

MouseEvent.clientX Read only

The X coordinate of the mouse pointer in local (DOM content) coordinates.

MouseEvent.clientY Read only

The Y coordinate of the mouse pointer in local (DOM content) coordinates.

MouseEvent.ctrlKey Read only

Returns true if the control key was down when the mouse event was fired.

MouseEvent.layerX Non-Standard Read only

Returns the horizontal coordinate of the event relative to the current layer.

MouseEvent.layerY Non-Standard Read only

Returns the vertical coordinate of the event relative to the current layer.

MouseEvent.metaKey Read only

Returns true if the meta key was down when the mouse event was fired.

MouseEvent.movementX Read only

The X coordinate of the mouse pointer relative to the position of the last mousemove event.

MouseEvent.movementY Read only

The Y coordinate of the mouse pointer relative to the position of the last mousemove event.

MouseEvent.offsetX Read only

The X coordinate of the mouse pointer relative to the position of the padding edge of the target node.

MouseEvent.offsetY Read only

The Y coordinate of the mouse pointer relative to the position of the padding edge of the target node.

MouseEvent.pageX Read only

The X coordinate of the mouse pointer relative to the whole document.

MouseEvent.pageY Read only

The Y coordinate of the mouse pointer relative to the whole document.

MouseEvent.relatedTarget Read only

The secondary target for the event, if there is one.

MouseEvent.screenX Read only

The X coordinate of the mouse pointer in global (screen) coordinates.

MouseEvent.screenY Read only

The Y coordinate of the mouse pointer in global (screen) coordinates.

MouseEvent.shiftKey Read only

Returns true if the shift key was down when the mouse event was fired.

MouseEvent.mozPressure Non-Standard Deprecated Read only

The amount of pressure applied to a touch or tablet device when generating the event; this value ranges between 0.0 (minimum pressure) and 1.0 (maximum pressure). Instead of using this deprecated (and non-standard) property, you should use PointerEvent and look at its pressure property.

MouseEvent.mozInputSource Non-Standard Read only

The type of device that generated the event (one of the MOZ_SOURCE_* constants). This lets you, for example, determine whether a mouse event was generated by an actual mouse or by a touch event (which might affect the degree of accuracy with which you interpret the coordinates associated with the event).

MouseEvent.webkitForce Non-Standard Read only

The amount of pressure applied when clicking

MouseEvent.x Read only

Alias for MouseEvent.clientX.

MouseEvent.y Read only

Alias for MouseEvent.clientY

Usage notes

The MouseEvent object passed into the event handler for click has its detail property set to the number of times the target was clicked. In other words, detail will be 2 for a double-click, 3 for triple-click, and so forth. This counter resets after a short interval without any clicks occurring; the specifics of how long that interval is may vary from browser to browser and across platforms. The interval is also likely to be affected by user preferences; for example, accessibility options may extend this interval to make it easier to perform multiple clicks with adaptive interfaces.

Internet Explorer

Internet Explorer 8 & 9 suffer from a bug where elements with a computed background-color of transparent that are overlaid on top of other element(s) won't receive click events. Any click events will be fired at the underlying element(s) instead. See this live example for a demonstration.

Known workarounds for this bug:

Safari Mobile

Safari Mobile 7.0+ (and likely earlier versions too) suffers from a bug where click events aren't fired on elements that aren't typically interactive (e.g. <div>) and which also don't have event listeners directly attached to the elements themselves (i.e. event delegation is being used). See this live example for a demonstration. See also Safari's docs on making elements clickable and the definition of "clickable element".

Known workarounds for this bug:

  • Set cursor: pointer; on the element or any of its ancestors.
  • Add a dummy onclick="void(0)" attribute to the element or any of its ancestors up to but not including <body>.
  • Use a typically interactive element (e.g., <a>) instead of one that isn't typically interactive (e.g., <div>).
  • Stop using click event delegation.

Safari Mobile considers the following elements to be typically interactive (and thus they aren't affected by this bug):

  • <a> (but it must have an href)
  • <area> (but it must have an href)
  • <button>
  • <img>
  • <input>
  • <label> (but it must be associated with a form control)
  • <textarea>
  • This list is incomplete; you can help MDN by doing further testing/research and expanding it.

Examples

This example displays the number of consecutive clicks on a <button>.

HTML

<button>Click</button>

JavaScript

const button = document.querySelector('button');

button.addEventListener('click', (event) => {
  button.textContent = `Click count: ${event.detail}`;
});

Result

Try making rapid, repeated clicks on the button to increase the click count. If you take a break between clicks, the count will reset.

Specifications

Specification
UI Events
# event-type-click
HTML Standard
# handler-onclick

Browser compatibility

BCD tables only load in the browser

See also