2010-10-09 39 views
1

我想使用Ajax加载一些内容到页面。加载的html包含一些javascript代码。即使代码被包装在$(document).ready中,也会在内容插入到文档中之前执行,因为在加载内容时父文档的Dom已准备就绪。推迟JavaScript执行,直到内容已被添加到文档

如何推迟代码的执行,直到内容被插入到文档中。下面是我想加载HTML(这是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> 

更新:删除无脚本标签

回答

1

看来这个问题是openid.init()是加载它自己的数据,并且想要在同步加载数据后操作它。有几个解决方案:

关联在异步加载完成时执行的回调函数。 openid库不提供这种功能吗?

如果您知道在添加到DOM之前要处理的数据元素的有效选择器,则可以使用.live()

我注意到你正在使用noscript标签。我强烈建议不要这样做。通过JS来完成所有的DOM操作。

+0

'

+0

openid.init引用像'#openid_choice'和'#openid_input_area'这样的元素,它们是加载内容的一部分。我只能修改加载的内容,而不是加载内容的脚本。是否可以从加载的内容中设置回调? (noscript标记是openid-selector插件的一部分,我将删除它) – 2010-10-09 08:21:31

+0

noscript有其用处,但在这一点上它可能被认为不推荐使用,所有的东西都应该由JS自己处理。 noscript有其共同的问题:只检测浏览器JS禁用,不防火墙禁用或任何其他措施,noscript是块级元素,noscript本质上增加了行为的力量,这是邪恶的HTML! – 2010-10-09 08:21:39

相关问题