【问题标题】:knowing when dynamically added data in div finished loading知道在 div 中动态添加的数据何时完成加载
【发布时间】:2023-03-22 13:53:01
【问题描述】:

我正在使用 ajax 将包含图像的 html 数据加载到我页面上的 div 中

$('#container').html(data)

假设变量data是ajax返回的, 我如何知道新数据(和图像)何时完成加载到容器中?

【问题讨论】:

  • 您真的想知道加载的数据何时插入到容器中吗?这应该几乎立即发生。也许您真的对您的 ajax 调用何时完成获取数据并准备好将其插入容器中感兴趣?为此,jQuery ajax 函数提供了添加回调函数。

标签: jquery html ajax dom


【解决方案1】:

您正在寻找的是.promise().done()。这些在您想要等待在集合或 jQuery 对象上运行的任何和所有动画完成而不在单独的回调中传递代码的情况下也很有用。

如果您要对加载的内容调用代码或处理程序,那么您应该查看.load() 事件和委托事件处理程序。您可能不需要两者,但无论如何您都应该阅读、了解和理解它们。您可以在 .on() 方法的文档中阅读有关委派事件处理程序的信息。


委派事件处理程序快速总结

委托事件处理程序是您附加到您要侦听的内容的祖先元素(可能尚未加载或尚未加载)的处理程序。

以下是委托click 处理程序绑定到body 元素并设置为侦听具有类foo 的后代元素上的click 事件的示例。这意味着此处理程序将侦听属于 body 元素的后代的类 foo 的所有元素(即使是稍后添加但尚未加载到 DOM 中的元素)。

$("body").on("click", ".foo", function() {
    bar();
});

下面的内容完全相同,只是它只将处理程序绑定到绑定处理程序时存在的那些.foo 元素。处理程序不会侦听以后添加的任何 .foo 元素。

$(".foo").on("click", function () { 
   bar();
});

通过将选择器参数传递给.on() 方法,您可以告诉jQuery,与其监听绑定元素上发生的指定事件,不如监听源自于的传播(或冒泡)事件匹配给定选择器以到达绑定元素的后代,并且应该使用触发事件的后代作为处理程序的上下文对象 (this) 调用处理程序。


jQuery API 的相关链接

【讨论】:

  • .promise().done() 一旦命令 (html(data)) 完成就会触发。不是在内容完成加载时。我需要知道内容(尤其是图片)何时完成加载
  • 我根据您的要求更新了我的答案,.load(),以及我认为您真正在寻找的内容,即使用 .on() 的委托事件处理程序。
  • 按照您的步骤,我添加了 $("body").on("load", "#container", function() { alert('loaded'); });但是,这并没有触发:/我错过了什么?
  • 该事件处理程序将在浏览器完成加载 #container 元素时触发,而不是在 #container 元素稍后发生某些事情时触发。此外,您在添加事件处理程序时需要小心。如果您将该代码简单地添加到<head>,它不会触发,因为此时<body> 将不会在那里添加事件处理程序。您可能想查看 jQuery 的 ready() 函数。但我不确定它是否会帮助您解决原来的问题。
  • 抱歉耽搁了这么久。但我仍然无法解决这个问题。我尝试在 ajax 调用中添加事件。但仍然对我没有任何好处。了解通过 ajax 添加的 html 何时加载到容器中的最佳方法是什么?谢谢
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 2011-07-05
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2012-04-13
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多