not delegate change alternative javascript jquery function live deprecated

javascript - delegate - jquery on focus



jQuery 1.9.live() no es una funciĆ³n (9)

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

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


jQuery .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 se romperán las cosas si no sigue la guía de migración a continuación. ¡No debe simplemente reemplazar .live() con .on() !

Lee antes de comenzar a buscar y reemplaza:

Para correcciones rápidas / rápidas en un sitio en vivo, no solo reemplace la palabra clave en live con,
¡Como los parámetros son diferentes !

.live(events, function)

debe asignar a:

.on(eventType, selector, function)

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

Ejemplo de migración 1:

antes de:

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

después, mueve el elemento secundario ( a ) al selector .on() :

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

Ejemplo de migración 2:

antes de:

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

después, mueves el elemento ( .myButton ) al selector .on() y encuentras el elemento padre más cercano (preferiblemente con una ID):

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

Si no sabes qué poner como padre, el body siempre funciona:

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

Ver también:


.live () estaba en desuso y ahora se ha eliminado de jQuery 1.9. Debería usar .on()



El puerto de .live() de .live() para jQuery> = 1.9 Evita refactorizar las dependencias de JS en .live() Utiliza un contexto de selector de 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); } } }); }


La documentación de la API de jQuery enumera en live() como obsoleta a partir de la versión 1.7 y eliminada a partir de la versión 1.9: link .

versión en desuso: 1.7, eliminado: 1.9

Además declara:

A partir de jQuery 1.7, el método .live () está en desuso. Utilice .on() para adjuntar controladores de eventos. Los usuarios de versiones anteriores de jQuery deben usar .delegate() en lugar de .live ()


Puede evitar la refactorización de su código incluyendo el siguiente código de JavaScript

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


Si está usando jQuery gem jquery-rails Ruby on Rails y por alguna razón no puede refactorizar su código heredado, la última versión que aún es compatible es 2.1.3 y puede bloquearlo usando la siguiente sintaxis en tu Gemfile :

gem ''jquery-rails'', ''~> 2.1'', ''= 2.1.3''

entonces puedes usar el siguiente comando para actualizar:

bundle update jquery-rails

Espero que ayude a otros que enfrentan un problema similar.


Tiendo a no usar la sintaxis .on (), si no es necesario. Por ejemplo, puedes migrar más fácil de esta manera:

antiguo:

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

nuevo:

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

Aquí hay una lista de controladores de eventos válidos: https://api.jquery.com/category/forms/


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 obsoleto pero necesita funciones como "live", "browser", etc.