Meu aplicativo adicionou Dropdowns dinamicamente. O usuário pode adicionar quantos forem necessários.
Tradicionalmente, eu estava usando o live()
método do jQuery para detectar quando um desses menus suspensos foi change()
ed:
$('select[name^="income_type_"]').live('change', function() {
alert($(this).val());
});
No jQuery 1.7, atualizei isso para:
$('select[name^="income_type_"]').on('change', function() {
alert($(this).val());
});
Olhando para o Documentos, isso deve ser perfeitamente válido (certo?) - mas o manipulador de eventos nunca é acionado. Obviamente, confirmei que o jQuery 1.7 está carregado e em execução, etc. Não há erros no log de erros.
O que estou fazendo de errado? Obrigado!
javascript
jquery
jquery-1.7
Jack
fonte
fonte
live
está realmente sendo usado deon
qualquer maneira, portanto, uma reescrita do código legado talvez ainda não seja necessária atélive
que seja removida, o que acredito ser 1.9. Trecho da fonte 1.7.1:live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn ); return this;}
Portanto, se alguém não estiver atualizando para uma versão em quelive
se foi, uma atualização pode não ser necessária imediatamente para o código legado. Para um novo código fora do curso, use oon()
recomendado. Eu apenas pensei que esta informação poderia ajudar alguém em algum momento.live
paraon
.Respostas:
A
on
documentação declara (em negrito;)):Equivalente a
.live()
seria algo comoEmbora seja melhor se você vincular o manipulador de eventos o mais próximo possível dos elementos, isto é, de um elemento mais próximo na hierarquia.
Atualização: Ao responder a outra pergunta, descobri que isso também é mencionado na
.live
documentação :fonte
bind
,live
edelegate
chamadas paraon
..live
>.on
.on
sintaxe é mais lógica, pois o ouvinte está realmente conectado ao seletor que você fornece. Quando o evento é acionado, o jQuery percorre o DOM e executa manipuladores onde especificado (delegação de evento simples)..live
sugeriu que havia algo "mágico" que aconteceu, e foi dito que anexar manipuladores de eventos para "elementos futuros" que não eram inteiramente verdadeiros.Além da resposta selecionada,
Porta
jQuery.live
para o jQuery 1.9+ enquanto você espera a migração do aplicativo. Adicione isso ao seu arquivo JavaScript.Nota: A função acima não funcionará no jQuery v3 conforme
this.selector
for removida.Ou você pode usar https://github.com/jquery/jquery-migrate
fonte
Acabei de encontrar uma solução melhor que não envolve a edição de código de terceiros:
https://github.com/jquery/jquery-migrate/#readme
Instale o pacote NuQuet do jQuery Migrate no Visual Studio para eliminar todos os problemas de versão. Da próxima vez que a Microsoft atualizar seus módulos discretos de AJAX e validação, talvez tente novamente sem o script de migração para verificar se eles resolveram o problema.
Como o jQuery Migrate é mantido pela jQuery Foundation, acho que essa não é apenas a melhor abordagem para bibliotecas de terceiros e também para receber mensagens de aviso para suas próprias bibliotecas, detalhando como atualizá-las.
fonte
Além das respostas selecionadas,
Se você usa o Visual Studio , pode usar o Regex Replace .
Em Editar> Localizar e substituir> Substituir em arquivos
ou Ctrl + Shift + H
No pop-up Localizar e substituir, defina esses campos
Encontre o que:
\$\((.*)\)\.live\((.*),
Substitua por:
$(document.body).on($2,$1,
Nas opções de localização, marque "Usar expressões regulares"
fonte
editor aberto jquery verision xxxjs, encontre
jQuery.fn.extend
adicionar código
Exemplo: jquery-2.1.1.js -> linha 7469 (jQuery.fn.extend)
Exemplo de visualização de imagens
fonte