2016-03-31 12 views
2

baut Ich habe den folgenden Code, jquery verwendet dynamisch eine Seite zu aktualisieren, sobald seine von einer URL

$(document).ready(function() { 
     var htmlattri="background-color:red;"; 
     $("body").attr("style", htmlattri); 
     $("#navbar").append('<div id="test" style="position: absolute; left: 0px; top: 0px; z-index: 3000; height: 20px"><input type="button" value="Back" onclick="window.history.go(-1)" /></div>') 
    }); 

Das Problem ist, ich habe geladen worden, dass die #navbar Element wird über Ajax (nicht JQuery) erstellt, was passiert, nachdem die $(document).ready gefeuert hat.

Gibt es eine Möglichkeit, dies auszulösen, sobald die Seite fertig ist?

Ich habe keine Kontrolle über die Seiten Quellcode.

Antwort

0

Legen Sie den Code, den Sie versuchen, auszuführen, in den success Callback des Ajax-Aufrufs, nachdem Sie den #navbar aufgebaut haben. Sie können den $(document).ready()-Aufruf nicht 'verschieben', er wird immer ausgeführt, wenn der Dom erstellt wurde

+0

Ich habe keine Kontrolle über den Quellcode, da ich die Jquery in die Seite injiziere, nachdem sie geladen wurde. – user1513388

+0

@ user1513388 Wie spritzt du js auf diese Seite? – itzmukeshy7

+0

Sie müssen einen onchange-Handler oder etwas an das 'navbar'-Element binden, möglicherweise nur für die erste Änderung und weitere Änderungen auslassen. –

0

Wie wäre es mit $ .Event?

$('body').on('wearedone', function(){ 
    console.log('hello!'); 
}); 

$(document).ready(function() { 
    var htmlattri="background-color:red;"; 
    $("body").attr("style", htmlattri); 
    $("#navbar").append('<div id="test" style="position: absolute; left: 0px; top: 0px; z-index: 3000; height: 20px"><input type="button" value="Back" onclick="window.history.go(-1)" /></div>'); 

    // this is where we "reimplement" $(document).ready 
    $('body').trigger($.Event('wearedone')); 
}); 
+0

Ich denke, wenn '$ ('body'). Trigger ($. Event ('wearedone'));' wird direkt nach $ ausgeführt ("# navbar"). Append ('...'); 'feuert, es wird nicht warten, bis das DOM-Rendering fertig ist. –

+0

Wahr. Aber da js nicht * async * ist, wird auf das Rendern des Doms gewartet. Nein? –

+0

Also, wenn Sie AJAX verwenden, um die Navigationsleiste zu erstellen, fügen Sie einfach das 'Ereignis' in' Erfolg: Funktion (r) {(...) Ereignis} ' –

Verwandte Themen