Pergunta

Imagine uma página normal, chamando javscript na cabeça. O problema é que alguns dos is not conteúdo carregado até que eu clique em um link. Posteriormente, quando este link carrega o conteúdo não vai funcionar. Isto é porque eu acho que o javascript já foi executado e por isso doesnt juntar-se a esses elementos chamados mais tarde. Não é html único padrão que está sendo chamado.

Assim, por exemplo, este é o código que chama o meu html externo.

$.get('content.inc.php', {id:id}, function(data){
        $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){
           $(this).html(data).slideDown('slow');
        });
    });

Se o html eu estava chamando por exemplo, e tag H1 já estava na página do Cufon iria funcionar. No entanto, porque eu estou carregando o conteúdo através do método acima tags H1 não será alterado com meus font.This escolhidos é apenas um exemplo. O mesmo se aplica para qualquer javascript.

Eu estava wonering se existe uma maneira de contornar isso sem chamar o javascript bem o html quando o seu recebido da função acima

Foi útil?

Solução

O Cufon.refresh() fazer o que quiser?

Como você disse Cufon era apenas um exemplo , eu também sugerem uma mais geral:

$.get(url, options, function(html, status) {
    var dom = $(html);
    // call your function to manipulate the new elements and attach
    // event handlers etc:
    enhance(dom);

    // insert DOM into page and animate:
    dom.hide();
    $target_element.append(dom); // <-- append/prepend/replace whatever.
    dom.show(); // <-- replace with custom animation
});

Outras dicas

Se você deseja anexar eventos a elementos na página que são criadas dinamicamente dar uma olhada a palavra-chave "ao vivo".

$('H1').live("click", function() { alert('it works!'); });

Espero que isso é o que você estava procurando.

Você pode anexar manipuladores de eventos para os dados que você recebe via o interior get() da função de retorno de chamada. Por exemplo

$.get('content.inc.php', {id:id}, function(data){
    $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){        
        $(this).html(data).find('a').click(function(e) {
            // specify an event handler for <a> elements in returned data
        }).end().slideDown('slow');
    });
});

live() também pode ser uma opção para você, dependendo de quais eventos você deseja ligar para (desde delegação usos live() evento, nem todos os eventos são suportados).

Andy tentar isso. Ele vai chamar o código Cufon após cada solicitação AJAX é completa e antes do html é realmente adicionado à página.

$.get('content.inc.php', {id:id}, function(data){
    $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){
        $(this).html(data);
        Cufon.replace('h1');
        $(this).slideDown('slow');
    });
});

JavaScript não é executado por causa de uma razão de segurança ou beccause jQuery é apenas a criação innerHTML deste elemento para algum texto (que não é interpretado como um javscript) se ele está contido. Assim, a segurança é o lado efeito.

Como resolver isso?

tentar encontrar todas as marcas SCRIPT em sua resposta e executá-los como pousios:

var scripts = myelement.getElementsByTagName("SCRIPT");
var i = 0;

for (i = 0; i < scripts.length; i++)
   eval(scripts[i].innerHTML);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top