[英]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.