Odložit spuštění JavaScriptu, dokud nebude obsah přidán do dokumentu

Snažím se načíst nějaký obsah na stránku pomocí Ajaxu. Načtený html obsahuje nějaký kód JavaScript. I když je kód zabalen do $(document).ready , spustí se před vložením obsahu do dokumentu, protože Dom nadřazeného dokumentu je připraven v době, kdy je obsah načten.

Jak mohu odložit provedení kódu, dokud nebude obsah vložen do dokumentu. Zde je html, který se pokouším načíst (toto je kód pro openid-selector)

<script type="text/javascript" src="/js/openid-jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    alert('ajax-html');
    openid.init('openid_identifier');
});
</script>
<!-- Simple OpenID Selector -->
<form action="try_auth.php" method="get" id="openid_form">
    <input type="hidden" name="action" value="verify" />

    <fieldset>
            <legend>Sign-in or Create New Account</legend>

            <div id="openid_choice">
                <p>Please click your account provider:</p>
                <div id="openid_btns"></div>
            </div>

            <div id="openid_input_area">
                <input id="openid_identifier" name="openid_identifier" type="text" value="http://www.joycebabu.com" />
                <input id="openid_submit" type="submit" value="Sign-In"/>
            </div>
    </fieldset>
</form>

Aktualizovat :Odebrána značka noscript

Odpověď

Zdá se, že problém je v tom, že openid.init() načítá svá vlastní data a vy s nimi chcete manipulovat poté, co byla synchronně načtena. Existuje několik řešení:

Přidružte funkci zpětného volání, která se spustí po dokončení asynchronního načítání. Nenabízí vám openid lib tuto funkci?

Pokud znáte platné selektory datových prvků, se kterými chcete manipulovat, před jejich přidáním do modelu DOM, můžete použít .live().

Všiml jsem si, že používáte značku noscript. Důrazně to nedoporučuji. Provádějte veškerou manipulaci s DOM prostřednictvím JS.