动态数据填充元素后的onload事件
onload event after dynamic data populates element
我有一个服务,可以从服务器中提取数据并将其填充到页面上的容器中。我正在尝试在数据完全加载(图像和所有)到元素中之后激发一个onload事件。这里有一个例子:
<div id="DynamicContainer"></div>
<script type="text/javascript">
$.ajax({
url: "www.serverurl.com/service.ashx",
async: true,
success: function(data) {
var e = document.getElementById("DynamicContainer");
var $e = $(e);
$e.hide();
e.innerHTML = ""; // Clear contents
e.onload = function() { // Set load event
$e.show(); // (This isn't firing after the 'e.innerHTML = data' has completed loaded)
};
e.innerHTML = data; // The above "onload" event isn't firing after the contents have loaded.
}
});
</script>
有什么建议吗?
简单地设置innerHTML不会触发load
事件。
你需要做一些类似的事情
就在从success
函数返回之前的$e.trigger('load')
。
load
事件仅由以下标记(源)支持:
- 车身
- 框架
- 框架集
- iframe
- img
- input[type="image"]
- 链接
- 脚本
- 风格
因此,由于#DynamicContainer
不是其中之一,您将需要一个特别的解决方案。像这样的东西应该可以做到:
$.ajax({
url: "www.serverurl.com/service.ashx",
async: true,
success: onSuccess
});
function onSuccess(data) {
var $el = $('#DynamicContainer'), deferreds;
$el.hide().html(data);
deferreds = $el.find('img').map(getOnLoadDeferred);
$.when.apply($, deferreds)
.done(function() { $el.show(); });
function getOnLoadDeferred() {
var deferred = $.Deferred();
this.onload = function imgOnLoad() { deferred.resolve(); };
return deferred;
}
}
基本上,您在隐藏的#DynamicContainer
中呈现html响应,等待每个img
激发load
,然后显示#DynamicContainer
。注意,您可能需要添加一些逻辑来处理图像加载失败的情况。
相关文章:
- image.onload事件和浏览器缓存
- 无法将java脚本函数与Panel'绑定;s OnLoad事件
- Jquery:如何动态绑定带有onload事件的文本框
- 如何使用body onload事件操作HTML音频标记和JavaScript函数
- “;预加载“;<音频>影响window.onload事件时间
- 如何在动态插入的html文件中使用onload事件
- CRM 2013-引用子记录的Javascript表单警报(onload事件)
- 在Firefox for Android的onload事件中,window.innerWidth的值错误
- 如何在 iFrame 的 onload 事件中执行代码
- 如何使标头动画仅在javascript中显示onload事件(不允许jQuery)
- iframe 中的 onload 事件仅触发一次
- 在文档准备就绪之前,Javascript onload 事件和其他事件
- 使用 onLoad 事件提高前端性能
- 我应该使用window.onload事件吗?
- 尝试在 jquery .load(“myHTML.html”) 上触发正文 'onLoad' 事件
- JavaScript OnLoad 事件不会在 iPhone 上触发
- iframe上的onload事件在IE和Firefox / GoogleChrome中的工作方式不同
- window.onload 事件不会触发或“如何正确初始化 js 项目?”
- 如何使用 onload 事件从 HTML 网站在 Windows 2008 上的文件共享上运行批处理文件
- 为什么我对
“onload”事件处理程序的使用偶尔工作