jQuery 1.9 .live() is not a function


I recently updated jQuery from 1.8 to 2.1. I suddenly discovered that the .live() stops working.
I get the error TypeError: $(...).live is not a function.

Is there any method I can use in place of .live()?

6/10/2014 1:03:43 PM

Accepted Answer

jQuery .live() has been removed in version 1.9 onwards.

That means if you are upgrading from version 1.8 and earlier, you will notice things breaking if you do not follow the migration guide below. You must not simply replace .live() with .on()!

Read before you start doing a search and replace:

For quick/hot fixes on a live site, do not just replace the keyword live with on,
as the parameters are different!

.live(events, function)

should map to:

.on(eventType, selector, function)

The (child) selector is very important! If you do not need to use this for any reason, set it to null.

Migration Example 1:


$('#mainmenu a').live('click', function)

after, you move the child element (a) to the .on() selector:

$('#mainmenu').on('click', 'a', function)

Migration Example 2:


$('.myButton').live('click', function)

after, you move the element (.myButton) to the .on() selector, and find the nearest parent element (preferably with an ID):

$('#parentElement').on('click', '.myButton', function)

If you do not know what to put as the parent, body always works:

$('body').on('click', '.myButton', function)

See also:

1/18/2018 10:46:06 PM

You can avoid refactoring your code by including the following JavaScript code

    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        return this;

The jQuery API documentation lists live() as deprecated as of version 1.7 and removed as of version 1.9: link.

version deprecated: 1.7, removed: 1.9

Furthermore it states:

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live()


Forward port of .live() for jQuery >= 1.9 Avoids refactoring JS dependencies on .live() Uses optimized DOM selector context

 * Forward port
 * Wrapper for newer jQuery.on()
 * Uses optimized selector context 
 * Only add if live() not already existing.
if (typeof == 'undefined' || !(jQuery.isFunction( {
      live: function (event, callback) {
         if (this.selector) {
              jQuery(document).on(event, this.selector, callback);

.live() was deprecated and has now been removed from jQuery 1.9 You should use .on()


A very simple fix that doesn't need to change your code, just add jquery migration script, download here

It supplies jquery deprecated but needed functions like "live", "browser" etc