jQuery .on('load')没有按预期工作
jQuery .on('load') is not working as expected
我正在尝试测试当一个图像被加载,所以我可以改变不透明度和淡入,我想这样做与.hphoto
类的所有图像。
这是我如何尝试用jQuery:
function handle_photoloads() {
$(".hphoto").each(function (i,obj) {
console.log("Yo");
if ($(obj).complete) {
console.log("1");
$(obj).css('opacity','1');
} else {
console.log("incomplete");
$(obj).on('load',function () {
console.log("2");
$(obj).css('opacity','1');
});
}
});
}
$(document).ready(function() {
handle_photoloads();
});
我得到的输出是"Yo"answers"不完整",我得到了.hphoto
对象数量的每个输出中的一个,所以有些东西在工作。为什么负载处理程序没有按预期触发?
这一行有问题:
if ($(obj).complete) {
你正在寻找一个complete
属性的jQuery对象,而不是DOM元素它包装。因为obj
指的是DOM元素,所以最简单的是:
if (obj.complete) { // Where `obj` refers to the DOM element
否则,请使用prop
,但当您知道是元素时通常不会使用它:
if ($(obj).prop("complete")) { // Where `obj` refers to the DOM element
然而,请注意检查complete
标志然后添加处理程序有一个小的错过事件的机会。浏览器中的JavaScript只有一个UI线程,但是浏览器不是单线程的。这是一个完全有效的事件序列:
JavaScript解释器计算
$(obj).prop("complete")
并返回false
的值浏览器的图像加载代码,在不同的线程上运行,看到它已经完成加载图像,并检查是否有任何事件处理程序为
load
事件注册;当UI线程下一次能够处理挂起的调用队列时,它不会添加任何处理程序回调。JavaScript解释器将
load
事件挂在图像上。
几率很低,但这是可能发生的。
如果你担心它,首先钩子处理程序,然后检查complete
,如果它被设置,调用你的处理程序并注销它。在上述情况的罕见反转中,您可能会得到两个调用而不是一个(因为事件发生在钩子处理程序之后,但在检查complete
之前),但是"有时两个"比"有时零"要好。: -)
jQuery的微妙命名的one
函数可以在这个上下文中使用:
function handle_photoloads() {
$(".hphoto").each(function (i,obj) {
var photo = $(obj); // Or = $(this), which would be more common
console.log("Yo");
photo.one("load", function() { // Note `one`, not `on`
photo.css('opacity','1');
});
if (photo.prop("complete")) {
photo.trigger("load");
}
});
}
one
在第一次调用处理程序时删除它。所以我们只得到一个回调,不管时间。
(在上面,您可以使用if (photo[0].complete)
而不是if (photo.prop("complete"))
)
- .load ajax无法正常工作whitin wordpress主题
- 动态潜水高度jQuery.Load()不工作
- Ajax load在chrome中不起作用,而在Fire fox中工作
- 为什么onload=“;函数“;工作,而jquery.load不工作;t
- jQuery.load随机工作,绝望
- Jquery 和 JS 在 DOM 上工作,而不是在 load
- 在 .detach() 和 .append() 之后使用 .load() 无法按预期工作
- 如何在没有window.location.reload()的情况下使JavaScript .load工作
- jquery .load() 函数仅在第一次工作
- 当我将变量附加到 URL 时,如何使 .load 工作
- 刷新页面时使用chrome缓存的图像.load()工作不正常
- 为什么不'第二次和第三次调用后,t ajax load()工作
- jQuery.load()是如何工作的
- load()由一个不工作的按钮触发
- jQuery.load()无法在jQueryload()加载的另一个内容中工作
- Ajax .load()在初始触发时无法工作
- 试图获得一个AJAX风格的.load()元素与.on()绑定,但它不工作
- jQuery .on('load')没有按预期工作
- Jquery load()只在firefox中工作
- Javascript stoppropagation不能与ajax .load一起工作