jQuery - faça algo depois que um elemento é carregado via Ajax, mas não na função Ajax
-
27-09-2019 - |
Pergunta
Estou tentando observar um elemento para carregar na página de uma chamada AJAX. Não tenho acesso ao jQuery que está fazendo a chamada do Ajax. Então, quando algum novo HTML é carregado na página, gostaria de aplicar algumas alterações.
Atualmente estou tentando usar a função .load ():
$( '.autosuggest_keyword' ).load(
function()
{
$( this ).val( 'load test' );
}
);
O que não está fazendo nada. Eu até tentei fazer isso um vinculativo ao vivo, o que realmente não faz sentido, mas pensei em tentar.
O seletor está correto.
Alguma ideia?
Solução 5
Consegui ter acesso à chamada original do Ajax, então essa pergunta está discutível agora. Estou deixando para os outros encontrarem, no entanto, caso uma dessas respostas os ajude.
Outras dicas
o .carregar() A função espera um URL para o qual enviar a solicitação AJAX, buscar os dados do servidor e atualizar o elemento fornecido no seletor. Então você precisa passar por um URL:
$('.autosuggest_keyword').load('/foo');
Você sabe o que está chamando de Ajax inital? Nesse caso, você poderia chamar uma função usando o mesmo evento. Embora isso possa causar alguma confusão se você estiver tentando alterar algo que o Ajax está carregando.
Os socos no pato podem ser a resposta:
should('duck-punch ajax success handler', function() {
var origAjax = $.ajax;
$.ajax = function(settings) {
if(settings.url === 'the/request/page') {
var origSuccess = settings.success;
settings.success = function(responseHTML) {
origSuccess.call(this, responseHTML);
//apply some changes to html
}
}
origAjax.call(this, settings);
}
});
Quando você liga. Carregar, é vinculativo esse manipulador de eventos a elementos que correspondem ao seu seletor no momento em que você está chamando. Como o elemento é adicionado depois disso, ele nunca está vinculado. o .viver A função resolve esse problema ligando -se ao currrent e futuro elementos que correspondem a um seletor. Eu acho que o que você quer é algo assim (não testado):
$( '.autosuggest_keyword' ).live('load',
function()
{
$( this ).val( 'load test' );
}
);