Jquery.load()未在加载的内容中加载javascript

Jquery.load()未在加载的内容中加载javascript,jquery,ajax,dom,Jquery,Ajax,Dom,我知道这个问题已经被问过很多次了,但我还没有找到一个明确而有用的答案,所以我想我应该用更清晰的格式再写一次这个问题 问题是,当您使用.load()函数时,您需要在加载的文件中运行javascript,但它不起作用,因为我猜DOM已经加载了 解决这个问题的简单方法是在加载的文件中再次加载javascript,但是如果有很多文件被加载,那么到处都是javascript并不是很好的做法 有人知道这样做的好方法吗 这是我能做到的最接近合理整洁的地方 <a data-toggle="modal" d

我知道这个问题已经被问过很多次了,但我还没有找到一个明确而有用的答案,所以我想我应该用更清晰的格式再写一次这个问题

问题是,当您使用.load()函数时,您需要在加载的文件中运行javascript,但它不起作用,因为我猜DOM已经加载了

解决这个问题的简单方法是在加载的文件中再次加载javascript,但是如果有很多文件被加载,那么到处都是javascript并不是很好的做法

有人知道这样做的好方法吗

这是我能做到的最接近合理整洁的地方

<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);