jQuery - faça algo depois que um elemento é carregado via Ajax, mas não na função Ajax

StackOverflow https://stackoverflow.com/questions/3460858

  •  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?

Foi útil?

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' );
    }
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top