使用jquery和HTML 5加载新零件时,javascript无法在新零件中运行

foo*_*oty 1 javascript ajax jquery html5

嗨,正如我的标题建议,我使用以下代码动态加载页面的一部分(这里左侧id)

function callBackFunctionLoadNextBackInPage(data)
{
    //alert(data);
    $("#left").fadeTo(100,1);
    var data = $(data).find( '#left' );
    $("#left").html(data);
    if(supports_history_api())
    {
        history.pushState(null, null, loadNextBackInPage_URL);  
        if(!popEventListnerAdded) {
            window.addEventListener("popstate", function(e) {
            loadNextBackInPage(location.href);
            },false);
            popEventListnerAdded = true;
        }

    }
    else
    {

    }
}
function loadNextBackInPage(url,parm)
{
    //alert(url);
    loadNextBackInPage_URL = url;
    $("#left").fadeTo(100,.2);
    $.post(url,parm,callBackFunctionLoadNextBackInPage,'html');
}
Run Code Online (Sandbox Code Playgroud)

这是我如何做的一个例子(点击显示详细信息链接

问题是:

它正确加载......但javascript无法正常工作.例如:1.我使用讨论进行评论,并且在下一节中没有加载

使用Facebook,Twitter,Yahoo!,DISQUS,OpenID或Anonymus添加评论

但是如果你刷新浏览器它确实正确加载...我只加载所有首先需要的脚本...那么为什么它不起作用?

另外例如:SHARE(单击此处)按钮应使用以下代码展开:

<script language="javascript" type="text/javascript">
function showHideDiv()
{
    var divstyle = new String();
    divstyle = document.getElementById("share").style.display;
    if(divstyle.toLowerCase()=="block" || divstyle == "")
    {
        document.getElementById("share").style.display = 'none';
    }
    else
    {
        document.getElementById("share").style.display = 'block';
    }
}
</script> 
Run Code Online (Sandbox Code Playgroud)

但它没有!...但如果我刷新页面(即再次加载网址),则有效

主要是我想讨论评论的事情.我使用以下代码生成它

<div class="entry">
  <h2>Add a Comment using Facebook, Twitter, Yahoo!, DISQUS, OpenID or Anonymus </h2>
  <p>


  <div id="disqus_thread"></div>
<script>
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    var disqus_shortname = '[written here]'; // required: replace example with your forum shortname

    // The following are highly recommended additional parameters. Remove the slashes in front to use.
     var disqus_identifier = 'page=show_song_details.php&songid=<?php echo $sid ?>&n=0&back=no';
     var disqus_url = '<?php echo $main_root.$_SERVER['REQUEST_URI']; ?>';
    var disqus_developer = 1 ;
    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

  </p>


</div>
Run Code Online (Sandbox Code Playgroud)

Dar*_*JDG 7

问题是<script>,在你的情况下,每当你从HTML字符串创建一个jQuery对象时,jQuery 都会删除标签,以对它进行一些DOM操作.find().

最好的办法是将整个HTML作为文本阅读,然后使用正则表达式将其删除并将相关部分放入文档中.您还应该考虑重新设计项目的一部分,因为在我看来,使用部分脚本加载外部页面的部分并不是一种好的做法,并且从长远来看可能难以维护.除非它是一个经过深思熟虑的模块化设计,你已经到了那里,你知道你在做什么.

这个问题与另一个帖子完全相同,但由于赏金,我不能投票决定关闭它.看看我的答案,看看它是否有帮助:jquery:在.find()之后保留<script>标签