Convert .live() to .on()

event-handling, jquery, jquery-events

Solution

You can pass an event-map as the first parameter:

$('#results tbody').on({
    'mouseenter' : function () {
        $(this).find('.popup').show();
     },
    'mouseleave' : function () {
        $(this).find('.popup').hide();
    }
}, 'tr');

jQuery documentation:

.on( events-map [, selector] [, data] ), events-map A map in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).

Problem

How do I go about combining this old jQuery code into the v1.7 `.on()`? v1.3 `.live()`: ``` $('#results tbody tr').live({ mouseenter: function () { $(this).find('.popup').show(); }, mouseleave: function () { $(this).find('.popup').hide(); } }); ``` v1.7 `.on()`: ``` $('#results tbody').on('mouseenter', 'tr', function () { $(this).find('.popup').show(); }); $('#results tbody').on('mouseleave', 'tr', function () { $(this).find('.popup').hide(); }); ``` I want to pass both event handlers to one `.on()` call, but keep the brilliant event delegation `.on()` allows me to do.

Original source