Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

onmount

rstacruz37.3kMIT2.0.0

Run something when a DOM element appears and when it exits

dom, enter, exit, mutation, mutationobserver, observe

readme

onmount

Run something when a DOM element appears and when it exits.
No dependencies. Legacy IE compatible. 1kb .min.gz.

Overview

Detecting elements

Run something to initialize an element on its first appearance.

onmount = require('onmount')

onmount('.push-button', function() {
  $(this).on('click', function() {
    alert('working...')
  })
})

See: Premise

Using with React

:tada: If you're looking to use Onmount to mount React components, check out Remount instead.

Polling for changes

Call $.onmount() everytime your code changes.

$('<button class="push-button">Do something</button>').appendTo('body')

$.onmount()

$('.push-button').click() //=> 'working...'

See: Idempotency

jQuery integration

jQuery is optional; use it to poll on popular events.

$(document).on('ready show.bs closed.bs load page:change', function() {
  $.onmount()
})

See: API

Cleanups

Supply a 2nd function to onmount() to execute something when the node is first detached.

$.onmount(
  '.push-button',
  function() {
    /*...*/
  },
  function() {
    alert('button was removed')
  }
)

document.body.innerHTML = ''

$.onmount() //=> 'button was removed'

See: Cleanups

What for?

Onmount is a safe, reliable, idempotent, and testable way to attach JavaScript behaviors to DOM nodes. It's great for common websites that are not Single-Page Apps. Read more on its premise and motivation.

rsjs (Reasonable System for JavaScript Structure) is a great standard that onmount fits perfectly into.

Usage

Onmount is available via npm and Bower.

npm install onmount
bower install onmount

It can be used as a CommonJS module or on its own. It doesn't require jQuery, but if jQuery is found, it'll attach itself to it as $.onmount.

onmount = require('onmount') // With CommonJS (ie, Browserify)
window.onmount // with no module loaders:
$.onmount // with jQuery

API

See: API

Browser compatibility

All modern browsers and IE8+. For legacy IE, use it with jQuery 1.x.

Examples

Examples are available in the source repo. See examples →

Thanks

onmount © 2015+, Rico Sta. Cruz. Released under the MIT License.
Authored and maintained by Rico Sta. Cruz with help from contributors (list).

ricostacruz.com  ·  GitHub @rstacruz  ·  Twitter @rstacruz

changelog

v2.0.0

May 17, 2025

  • Security: Address incomplete string escaping in CSS selectors by escaping both backslashes and double quotes, as flagged by GitHub CodeQL. This prevents malformed selectors and potential injection issues.
  • #210 - Remove support for onmount.debug.

v1.2.1

Mar 28, 2016

  • #76 - Fix errors in exit handlers called via onmount.teardown().

v1.2.0

Mar 15, 2016

For Turbolinks 5 users, please see the updated Using with Turbolinks documentation. You will need to use onmount.teardown().

  • Add onmount.teardown().
  • Improve compatibility with Turbolinks 5.

v1.1.0

Oct 1, 2015

  • Add onmount.debug.

v1.0.2

Jul 1, 2015

  • Fix devDependencies being wrongfully installed.
  • Update tests.

v1.0.1

Jul 1, 2015

  • Update keywords and description
  • Allow overriding of MutationObserver via polyfill (onmount.MutationObserver = ..)

v1.0.0

Jun 30, 2015

  • Initial release.