繁体   English   中英

jQuery无法在加载了ajax的div上执行

[英]jQuery doesn't execute on div loaded with ajax

我正在开发使用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的页面时,它运行良好。

@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 regex:rscript = /(?:(?!</ script>)<[^ <])* </ script> / gi,您正确的是我必须添加一个回调将功能加载到ajax中!

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

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

但是,我必须指出,使用eval被认为是一种不好的做法。 众所周知, “评估是邪恶的”,因为它性能不佳,并且可能存在XSS漏洞。 因此,您可能想看看如何在不直接使用AJAX调用的情况下实现相似的效果(可能是动态构建的script标签)。 但是,出于您的目的,如果响应完全是javascript,则eval将起作用。 否则,您将需要以某种方式从$.get返回的HTML中提取JavaScript。

采用

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

代替

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM