jQuery 1.9 .live() no es una función

Resuelto ngplayground asked hace 11 años • 10 respuestas

Recientemente actualicé jQuery de 1.8 a 2.1. De repente descubrí que .live()deja de funcionar.
Recibo el error TypeError: $(...).live is not a function.

¿Hay algún método que pueda utilizar en lugar de .live()?

ngplayground avatar Jan 16 '13 15:01 ngplayground
Aceptado

jQuery .live()ha sido eliminado en la versión 1.9 en adelante

Eso significa que si está actualizando desde la versión 1.8 y anterior, notará que las cosas fallan si no sigue la guía de migración a continuación. ¡ No debes simplemente reemplazar .live()con .on()!


Lea antes de comenzar a buscar y reemplazar:

Para soluciones rápidas/calientes en un sitio activo, no reemplace simplemente la función livecon on,
ya que los parámetros son diferentes .

.live(events, function)

debe asignarse a:

.on(eventType, selector, function)

¡El selector (niño) es muy importante! Si no necesita utilizar esto por algún motivo, configúrelo en null.


Ejemplo de migración 1:

antes:

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

después, mueves el elemento hijo ( a) al .on()selector:

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

Ejemplo de migración 2:

antes:

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

después, mueve el elemento .myButtonal .on()selector y busca el elemento principal más cercano (preferiblemente con una ID):

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

Si no sabes qué poner como padre, documentsiempre funciona:

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

Ver también:

  • jQuery: ¿cómo utilizar el método “on()” en lugar de “live()”?
  • Guía de migración de jQuery 1.9
Samuel Liew avatar Jan 16 '2013 08:01 Samuel Liew

Puede evitar refactorizar su código incluyendo el siguiente código JavaScript

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
        return this;
    }
});
Liran Barniv avatar Jul 30 '2015 17:07 Liran Barniv

Puerto de reenvío de .live()para jQuery >= 1.9 Evita la refactorización de dependencias de JS en .live() Utiliza el contexto del selector DOM optimizado

/** 
 * Forward port jQuery.live()
 * Wrapper for newer jQuery.on()
 * Uses optimized selector context 
 * Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
  jQuery.fn.extend({
      live: function (event, callback) {
         if (this.selector) {
              jQuery(document).on(event, this.selector, callback);
          }
      }
  });
}
David Thomas avatar Aug 05 '2015 08:08 David Thomas