当前位置: 首页 > 面试题库 >

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

壤驷雅达
2023-03-14
问题内容

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

问题是,当您使用.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内部,只是一种表单,其中包含需要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代码时,它还可以节省您的时间并保持代码整洁。

注意: 一旦我仅使用 datePicker
遇到使用此方法的问题,并且是在动态加载的页面中有datePicker输入,即使在调用了initReady()函数之后,也没有初始化它,
setTimeout函数调用我的initReady()函数

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

它解决了我的问题。希望对您有帮助。



 类似资料:
  • 我试图在一个网站上获得一个内容列表(若有人感兴趣的话,这一个)。布局最近发生了变化,现在他们不会一次加载所有内容,而是使用magic(可能是js)。我目前正在使用JSoup分析HTML,但我愿意接受建议。 这就是我得到的: 实现此目的的代码: 这是我想看到的(复制从检查元素后,页面加载了所有的内容): 谷歌帮不了什么忙,因为与微调器等相关的所有内容都与javascript有关。 解决方案: 由于J

  • 我想在中显示pdf文件的内容。 问题:当我启动时,一个新的对话框正在打开,不管我是想在浏览器中还是在pdf查看器中加载pdf。但我想直接在中加载内容。我还尝试了一个前缀url来嵌入内容,但结果显示:没有预览可用。 我的代码: 我现在用android-pdfView库用下面的代码尝试了一下: 但随后会在以下地址出现一个:。adress直接引用了我onedrive帐户中的pdf文件。所以当我在浏览器中

  • 这个问题让我头疼。我有一个简单的controller类,它能够呈现一个简单的html页面以及Spring Boot初始化器类。 我已经将HTML页面放在src/main/resources目录下的静态文件夹中。但我无法获得html页面。相反,我得到了404个错误。 下面是我的项目的结构 simpleController.java: home.html: 运行Spring Boot时的控制台日志:

  • 注意: 本教程假定你已经下载和安装了CodeIgniter开发环境。 首先,你需要创建一个可以处理静态内容请求的控制器类。控制器,是一个用来代理完成某项任务的PHP类,它充当基于MVC架构应用程序的“粘合剂”(译者注:控制器用来粘合/协调不同模型和视图。随着教程的深入,你会更深刻的理解这一点)。 举例来说,假设存在某个针对如下URL的请求: http://example.com/news/late

  • Note: 这篇教程假设你已经下载好 CodeIgniter ,并将其 安装 到你的开发环境。 你要做的第一件事情是新建一个 控制器 来处理静态页面,控制器就是一个简单的类, 用来完成你的工作,它是你整个 Web 应用程序的 “粘合剂” 。 例如,当访问下面这个 URL 时: http://example.com/news/latest/10 通过这个 URL 我们就可以推测出来,有一个叫做 "n

  • 问题内容: 我正在使用jquery地址插件来加载页面,但是没有hash(#)。 index.html: page.html: 在#content div中将从page.html中加载#content html(也许我应该使用其他函数,而不是.html(),请纠正我),因为div是script标签,但是加载该页面时我没有收到警告从ajax开始,无需加载ajax就可以运行。有人能帮我吗 ? 编辑:当我