javascript - 将代码应用于动态加载的图像

标签 javascript jquery ajax

我有一个页面,其中带有包装 div 的图像通过 ajax 加载。加载该图像时,我需要应用一些代码。 我不能改变 ajax 调用 所以我不能 只是在 ajax 调用上使用 on('success')。 一段时间后,带有 div 的图像以相同的方式重新加载(这是一种旋转)。

结构是这样的:

<div id="spot">
    <div id="xyz">
        <a href="http://someurl.com">
            <img src="http://someimage.url" />
        </a>
    </div>
</div>

“spot”div 是固定的,其中的所有内容都是动态加载的。

当我输入时

$('#xyz img').on('load', myCallback);

它不起作用,我想是因为当图像被重新加载时,监听器也被删除了。

我尝试使用委托(delegate)监听器:

$('#spot').on('load', '#xyz img', myCallback);

但也没有用,它没有被执行(我已经将 console.log 放入其中以验证发生了什么)。

当我在控制台中键入 $('#spot #xyz > img') 时,控制台会显示正确的对象。

如何在带有图像的动态内容准备好执行某些 DOM 脚本操作后立即运行我的 myCallback 函数?

最佳答案

如果您无法访问 AJAX 请求回调,那么您的选项仅限于 setInterval()检查元素是否已添加的计时器,MutationObserver 或 load img 上的事件元素 - 但请注意,这只会在 src 之后触发图片的部分已加载,因此会有延迟。

以下是使用 MutationObserver 的方法,但请注意,这仅适用于较新的浏览器:

var targetElement = document.querySelector('#container');
var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        // perform the required actions here...
        console.log(mutation.type);
    });
});

observer.observe(targetElement, { attributes: true, childList: true, characterData: true });

关于javascript - 将代码应用于动态加载的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39527131/

相关文章:

javascript - 在Javascript中递归调用 "parent"构造函数?

javascript - 带有两个输入字段的 SweetAlert 提示

javascript - 无法在 jquery-confirm 中设置宽度?

java - Ajax 链接通过 onClick() 方法中的 setVisible() 更改可见性

ajax - AngularJS:使用$ q同步触发ajax调用

javascript - 为什么我的 AngularJS View 在使用 Parse.com JavaScript SDK 进行 AJAX 调用后没有得到更新?

javascript - Parse.com fetch collection 上限为 1000

javascript RegExp 验证 url 表达式

javascript - jQuery 中的奇怪添加行为

jQuery 检查选​​项 val 是否被选中,进行数学计算并发出警报