Recientemente actualicé jQuery de 1.8 a 2.1. De repente descubrí que .live()
deja de funcionar.
Me sale el error TypeError: $(...).live is not a function
.
¿Hay algún método que pueda usar en lugar de .live()
?
fuente
Recientemente actualicé jQuery de 1.8 a 2.1. De repente descubrí que .live()
deja de funcionar.
Me sale el error TypeError: $(...).live is not a function
.
¿Hay algún método que pueda usar en lugar de .live()
?
.live()
se ha eliminado en la versión 1.9 en adelante.Eso significa que si está actualizando desde la versión 1.8 y anteriores, notará que las cosas se rompen si no sigue la guía de migración a continuación. ¡No debes simplemente reemplazar .live()
con .on()
!
Para soluciones rápidas / calientes en un sitio en producción, no basta con sustituir la palabra clave live
con el on
,
ya que los parámetros son diferentes !
.live(events, function)
debe asignar a:
.on(eventType, selector, function)
¡El selector (secundario) es muy importante! Si no necesita usar esto por algún motivo, configúrelo en null
.
antes de:
$('#mainmenu a').live('click', function)
después, mueve el elemento hijo ( a
) al .on()
selector:
$('#mainmenu').on('click', 'a', function)
antes de:
$('.myButton').live('click', function)
después, mueve el elemento ( .myButton
) al .on()
selector y encuentra el elemento padre más cercano (preferiblemente con una ID):
$('#parentElement').on('click', '.myButton', function)
Si no sabe qué poner como padre, body
siempre funciona:
$('body').on('click', '.myButton', function)
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;
}
});
return this;
al final de la función para preservar la capacidad de encadenamientoLa documentación de la API jQuery se enumera
live()
como obsoleta a partir de la versión 1.7 y eliminada a partir de la versión 1.9: enlace .Además establece:
fuente
Puerto de reenvío
.live()
para jQuery> = 1.9 Evita la refactorización de dependencias JS en el.live()
contexto del selector DOM optimizadofuente
.live () quedó en desuso y ahora se ha eliminado de jQuery 1.9. Debe usar .on ()
fuente
.live se eliminó en 1.9, consulte la guía de actualización: http://jquery.com/upgrade-guide/1.9/#live-removed
fuente
Una solución muy simple que no necesita cambiar su código, solo agregue el script de migración jquery, descargue aquí https://github.com/jquery/jquery-migrate/
Proporciona jquery en desuso pero necesita funciones como "live", "browser", etc.
fuente
Tiendo a no usar la sintaxis .on (), si no es necesario. Por ejemplo, puede migrar más fácilmente así:
antiguo:
nuevo:
Aquí hay una lista de controladores de eventos válidos: https://api.jquery.com/category/forms/
fuente
Si está utilizando la gema jQuery de Ruby on Rails
jquery-rails
y por alguna razón no puede refactorizar su código heredado, la última versión que aún admite es2.1.3
y puede bloquearlo utilizando la siguiente sintaxis en suGemfile
:entonces puede usar el siguiente comando para actualizar:
Espero que ayude a otros que enfrentan un problema similar.
fuente