2012-03-20 116 views
2

我知道这已被问了很多次,但我还没有找到一个清晰有用的答案,所以我想我会以更清晰的格式再次写这个问题?Jquery .load()不在加载的内容中加载JavaScript

问题是,当您使用.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."); 
     } 
    }); 
}); 

的file.php里面很简单,有需要的东西像日期选择器等 载荷工作正常字段的表格。

+0

如果包含“url”的响应(即将内容加载到“target”中),它可能会澄清您的问题。 – JoshNaro 2012-03-20 21:19:16

+0

我认为你有一个输入,需要是一个日期选择器文本框,它不工作,我是对吗? – 2012-03-20 21:48:42

+0

是的,但它可以是任何JavaScript我只是使用datepicker作为例子。 – Mediabeastnz 2012-03-21 02:36:40

回答

1

如果我明白你的问题,然后我觉得你应该换所有的JavaScript函数(即需要每一个成功的Ajax调用后执行)的单一功能里面像

​​

和您的document.ready事件应该像下面一个

​​

,每当你需要一个AJAX调用成功后,初始化一些动态内容只需要调用initReady()函数如下

initReady(); 

你的情况,你可以做你成功回调像下面

if(statusText == "success"){ 
    // Re-initiate all required javascript if the load was successful. 
    initReady();  
} 

给定的代码里面所以每次你没有时间来写你的每一个成功的ajax回调函数内所有的JavaScript代码和它也会节省你的时间并保持你的代码清洁。

注:一旦我遇到使用这种方法的一个问题仅出现在日期选择器,它是在一个动态加载的页面有一个日期选择器输入,甚至我的initReady后,没有被初始化()函数被调用,比我用setTimeout函数调用我的initReady()函数

setTimeout(function(){ initReady() },10); 

,它解决了我的问题。希望它能帮助你。

+0

谢谢谢赫,那是个好主意。 – Mediabeastnz 2012-03-21 02:36:03