Frage

Stellen Sie sich ein normales Seite calling javscript in dem Kopf. Das Problem ist, einen Teil des Inhalts ist nicht geladen, bis ich auf einen Link klicken. Anschließend, wenn dieser Link lädt den Inhalt es wird nicht funktionieren. Das ist, weil ich das Javascript erraten bereits ausgeführt wurde und dafür tut sich später genannt zu diesen Elementen befestigen. Es wird nur Standard-HTML aufgerufen wird.

So zum Beispiel ist dies der Code, der die externe HTML nennt.

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

Wenn die HTML-i wurde zum Beispiel und H1-Tag Aufruf war bereits in der Seite würden die cufon arbeiten. Jedoch, weil ich den Inhalt über die obigen Verfahren H1-Tags am Laden wird nicht mit meinem gewählten font.This ist nur ein Beispiel geändert werden. Das gleiche gilt für jeden Javascript gelten.

Ich war wonering, ob es eine Möglichkeit, dies zu umgehen ist es, die die JavaScript als auch die HTML ohne Aufruf, wenn sein aus der obigen Funktion erhalten

War es hilfreich?

Lösung

Cufon.refresh() tun, was Sie wollen?

Wie Sie sagten Cufon war nur ein Beispiel , ich würde vorschlagen, dass auch eine allgemeinere:

$.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
});

Andere Tipps

Wenn Sie Ereignisse auf Elemente auf der Seite zu befestigen, die dynamisch erstellt werden, werfen Sie einen Blick auf die „live“ Schlüsselwort.

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

Hope das ist, was Sie suchen.

Sie können Event-Handler die Daten anhängen, die Sie über den get() innerhalb der Callback-Funktion bekommen. Zum Beispiel

$.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() kann auch eine Option für Sie sein, je nachdem, welche Ereignisse, die Sie binden möchten (da live() Ereignis Delegation verwendet, nicht alle Ereignisse werden unterstützt ).

Andy versuchen dies. Es wird die Cufon Code aufrufen, nachdem jeder AJAX-Anforderung abgeschlossen ist und bevor die HTML tatsächlich auf die Seite hinzugefügt wird.

$.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 ist nicht aufgrund eines Sicherheits Grund ausgeführt OR beccause jQuery ist nur bis zu einem gewissen Text dieses Elements innerHTML- Einstellung (die nicht als javscript interpretiert wird), wenn es enthalten ist. So ist die Sicherheit der neben Wirkung.

Wie es zu lösen?

versuchen, alle SCRIPT-Tags in Ihrer Antwort zu finden und sie auszuführen, wie Bricht:

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

for (i = 0; i < scripts.length; i++)
   eval(scripts[i].innerHTML);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top