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


Answers

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);
        }
    }
});
Question

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

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




Una solución muy simple que no necesita cambiar su código, simplemente agregue el script de migración jquery, descargue aquí https://github.com/jquery/jquery-migrate/

Proporciona funciones desaprobadas de jquery pero necesitadas como "en vivo", "navegador", etc.




Tiendo a no usar la sintaxis .on (), si no es necesario. Por ejemplo, puedes migrar más fácilmente así:

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/




Solo desde arriba

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

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



$('.jcrop-tracker').live('dblclick', function () {
    $('#btnCrop').trigger("click");
});

se convierte

$('body').on('dblclick', '.jcrop-tracker', function () {
    $('#btnCrop').trigger("click");
});



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

/** 
 * 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);
          }
      }
  });
}