Jquery.load()未在加载的内容中加载javascript
我知道这个问题已经被问过很多次了,但我还没有找到一个明确而有用的答案,所以我想我应该用更清晰的格式再写一次这个问题 问题是,当您使用.load()函数时,您需要在加载的文件中运行javascript,但它不起作用,因为我猜DOM已经加载了 解决这个问题的简单方法是在加载的文件中再次加载javascript,但是如果有很多文件被加载,那么到处都是javascript并不是很好的做法 有人知道这样做的好方法吗 这是我能做到的最接近合理整洁的地方Jquery.load()未在加载的内容中加载javascript,jquery,ajax,dom,Jquery,Ajax,Dom,我知道这个问题已经被问过很多次了,但我还没有找到一个明确而有用的答案,所以我想我应该用更清晰的格式再写一次这个问题 问题是,当您使用.load()函数时,您需要在加载的文件中运行javascript,但它不起作用,因为我猜DOM已经加载了 解决这个问题的简单方法是在加载的文件中再次加载javascript,但是如果有很多文件被加载,那么到处都是javascript并不是很好的做法 有人知道这样做的好方法吗 这是我能做到的最接近合理整洁的地方 <a data-toggle="modal" d
<a data-toggle="modal" data-target="#DIV" href="./ajax/file.php?id='.$row['id'].'"></a>
$("a[data-toggle='modal']").on('click', function() {
var target, url;
target = $(this).attr('data-target');
url = $(this).attr('href');
return $(target).load(url, function(responseText, statusText, xhr){
if(statusText == "success"){
// Re-initiate all required javascript if the load was successful.
$(".datepicker").datepicker({
changeMonth: true,
changeYear: true,
showOn: "both",
buttonImage: "./assets/img/calendar.gif",
buttonImageOnly: true,
dateFormat: 'dd-mm-yy'
});
}
if(statusText == "error"){
alert("There was a problem trying to load the page.");
}
});
});
$([a[data toggle='modal'])。在('click',function()上{
var目标,url;
target=$(this.attr('data-target');
url=$(this.attr('href');
return$(target).load(url,函数(responseText,statusText,xhr){
如果(状态文本==“成功”){
//如果加载成功,则重新启动所有必需的javascript。
$(“.datepicker”).datepicker({
变化月:对,
变化年:是的,
showOn:“两者”,
buttonImage:“./assets/img/calendar.gif”,
buttonImageOnly:正确,
日期格式:“dd-mm-yy”
});
}
如果(状态文本==“错误”){
警报(“尝试加载页面时出现问题。”);
}
});
});
php文件中只是一个表单,其中包含需要datepicker等内容的字段。
加载工作正常。如果我理解您的问题,那么我认为您应该将所有javascript函数(需要在每次成功的ajax调用后执行)封装在一个函数中,如
function initReady(){
$(".datepicker").datepicker({...});
// Other codes
}
您的document.ready事件应该与以下事件类似
$(document).ready(function(){
initReady();
});
当您需要在ajax成功调用后初始化一些动态内容时,只需调用initReady()函数,如下所示
initReady();
在您的情况下,您可以在成功回调中执行此操作,如下面给出的代码所示
if(statusText == "success"){
// Re-initiate all required javascript if the load was successful.
initReady();
}
因此,每次不必在每个ajax成功回调函数中编写所有javascript代码,它还可以节省时间并保持代码干净
注意:有一次,我在使用日期选择器时遇到了一个问题,就是在动态加载的页面中有一个日期选择器输入,即使调用了initReady()函数,它也没有被初始化,然后我使用setTimeout函数调用initReady()函数
它解决了我的问题。希望它能对您有所帮助。如果您包含“url”(即加载到“target”中的内容)的响应,它可能会澄清您的问题。我认为您的输入需要是一个datepicker文本框,但它不起作用,对吗?是的,但它可以是任何javascript,我只是以datepicker为例。谢谢Sheikh,这是个好主意。
setTimeout(function(){ initReady() },10);