jQuery不会在使用ajax加载的div上执行

时间:2013-01-14 06:17:49

标签: javascript jquery ajax dom

我正在使用PHP,MySQL,AJAX,Javascript,HTML5,css3开发一个网站...我正在尝试做的是加载外部html文件并使嵌入的Javascript执行。

我正在尝试使用的ajax负载是

<pre><code>


    $(document).ready(function(){

        $(".meny a").click(function(){
            page=$(this).attr("href");
            $.ajax({
                url: "includes/"+page,
                cache:false,
                success:function(html){
                    afficher(html);
                },

                error:function(XMLHttpRequest,textStatus,errorThrown){
                    alert(testStatus);
                }
            })

            return false;
        });
    });

    function afficher(data){
        $("#main").fadeOut(500,function(){
        $("#main").empty(); 
        $("#main").append(data);
        $("#main").fadeIn(1000);
        })
        }


</code></pre>

当页面的内容直接加载javascript(或jQuery)函数工作正常,但是当在由AJAX加载的另一个页面的内容中找到div标签时,javascript(或jQuery)不能在这个div上工作,而jquery脚本已存储在“head”标记中。

我认为问题是AJAX,因为当我直接调用包含Javascript的页面时,它工作正常。

3 个答案:

答案 0 :(得分:2)

@kieran 不,我从不尝试这个技巧!我想我找出了真正的问题!

jQuery实际上删除了它在ajax调用中遇到的任何javascript。他们故意这样做是为了防止IE中出现问题。以下是jQuery 1.8.3(第7479-7481行)的实际片段:

// inject the contents of the document in,removing the scripts 
// to avoid any 'Permission Denied' errors in IE 
.append( responseText.replace( rscript, "" ) ) 

在第7291行定义了rscript正则表达式:rscript = /(?:(?!&lt; / script&gt;)&lt; [^&lt;])*&lt; / script&gt; / gi, 你是对的我必须在加载ajax中添加一个回调函数!

答案 1 :(得分:0)

默认情况下,AJAX检索的页面中包含的javascript将不会被执行,因为它被视为纯文本。

您需要将文本评估为javascript。 javascript中有一个内置函数可以实现这个名为eval的功能。以下是关于使用eval和AJAX的好文章,感谢technify.me

但是我必须注意,使用eval被认为是一种不好的做法。有一个众所周知的说法"eval is evil"因为它的性能很差,并且可能存在漏洞。因此,您可能希望了解如何在不直接使用AJAX调用的情况下实现类似的影响(可能是动态构建的script标记)。但是,出于您的目的,如果响应纯粹是javascript,则eval将起作用。否则,您需要以某种方式从您$.get返回的HTML中提取javascript。

答案 2 :(得分:-2)

使用

 $(".meny a").on( 'click', ...

而不是

 $(".meny a").click( ....

$(".meny a")现在可以点击