jQuery 1.9 .live() no es una función
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()
?
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 live
con 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 .myButton
al .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, document
siempre 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
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;
}
});
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);
}
}
});
}