Atualizei recentemente o jQuery de 1.8 para 2.1. De repente, descobri que .live()
para de funcionar.
Eu recebo o erro TypeError: $(...).live is not a function
.
Existe algum método que eu possa usar no lugar de .live()
?
fonte
Atualizei recentemente o jQuery de 1.8 para 2.1. De repente, descobri que .live()
para de funcionar.
Eu recebo o erro TypeError: $(...).live is not a function
.
Existe algum método que eu possa usar no lugar de .live()
?
.live()
foi removido na versão 1.9 em diante.Isso significa que, se você estiver atualizando a partir da versão 1.8 e anterior, notará problemas se não seguir o guia de migração abaixo. Você não deve simplesmente substituir .live()
por .on()
!
Para correções rápidas / quentes em um site ativo, não substitua apenas a palavra live
- chave por on
,
pois os parâmetros são diferentes !
.live(events, function)
deve mapear para:
.on(eventType, selector, function)
O seletor (filho) é muito importante! Se você não precisar usar isso por qualquer motivo, defina-o como null
.
antes:
$('#mainmenu a').live('click', function)
depois, você move o elemento filho ( a
) para o .on()
seletor:
$('#mainmenu').on('click', 'a', function)
antes:
$('.myButton').live('click', function)
depois, você move o elemento ( .myButton
) para o .on()
seletor e encontra o elemento pai mais próximo (de preferência com um ID):
$('#parentElement').on('click', '.myButton', function)
Se você não sabe o que colocar como pai, body
sempre funciona:
$('body').on('click', '.myButton', function)
Você pode evitar a refatoração do seu código incluindo o seguinte código JavaScript
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
return this;
no final da função, a fim de preservar a capacidade de encadeamentoA documentação da API do jQuery é listada
live()
como obsoleta na versão 1.7 e removida na versão 1.9: link .Além disso, afirma:
fonte
Porta de encaminhamento
.live()
para jQuery> = 1.9 Evita a refatoração de dependências de JS.live()
Utiliza o contexto otimizado do seletor DOMfonte
.live () foi descontinuado e agora foi removido do jQuery 1.9 Você deve usar .on ()
fonte
.live foi removido no 1.9, consulte o guia de atualização: http://jquery.com/upgrade-guide/1.9/#live-removed
fonte
Uma correção muito simples que não precisa alterar seu código, basta adicionar o script de migração do jquery, faça o download aqui https://github.com/jquery/jquery-migrate/
Ele fornece jquery obsoleto, mas funções necessárias como "live", "browser" etc.
fonte
Costumo não usar a sintaxe .on (), se não for necessário. Por exemplo, você pode migrar mais fácil assim:
velho:
Novo:
Aqui está uma lista de manipuladores de eventos válidos: https://api.jquery.com/category/forms/
fonte
Se você estiver usando a jQuery do Ruby on Rails
jquery-rails
e, por algum motivo, não puder refatorar seu código legado, a última versão que ainda suporta é2.1.3
e você pode bloqueá-lo usando a seguinte sintaxeGemfile
:então você pode usar o seguinte comando para atualizar:
Espero que ajude outras pessoas que enfrentam um problema semelhante.
fonte