用 AJAX 填充后无法设置正确的 div 宽度
Can't set correct div width after populating it with AJAX
此代码使用 Ajax 调用填充图像滑块内的内部 div :
$.ajax({
type: "GET",
dataType: 'json',
url: $(this).attr('href')
}).done(function (result) {
// append thumbnails to lower slider
var correct_width = 0;
for (var $i = 0; $i < result[1].length; $i++) {
$('#lower_slider').append("<img src='" + result[1][$i]['image_thumb_src'] + "'>");
// calculate $('#lower_slider') width
$('#lower_slider').find('img').each(function () {
correct_width += $(this).outerWidth();
});
}
// set $('#lower_slider') width
$('#lower_slider').width(correct_width);
});
此代码的功能在第二次执行时完美运行 - 很明显,它与某些竞争条件有关。那么我该如何消除它们呢?
p.s - 我知道有人问这个问题有不同的用途,但是 none 的建议解决方案对我有用。
谢谢。
看起来第二次成功了,因为请求的图片已经缓存了。
图像加载后尝试计算 correct_width:
var correct_width = 0;
var imgArray = new Array();
var obj = this;
for (var $i = 0; $i < result[1].length; $i++) {
imgArray[$i] = new Image();
imgArray[$i].src = result[1][$i]['image_thumb_src'];
imgArray[$i].onload = function() {
$('#lower_slider').append("<img src='" + this.src + "'>");
correct_width += $(obj).outerWidth();
}
}
我还没有测试过这段代码。不过应该没问题。
嗯,我让它工作的唯一方法是在调整大小和宽度计算之前设置延迟:
var correct_width = 0;
for (var $i = 0; $i < result[1].length; $i++) {
$("#lower_slider").append(
"<img src=" + result[1][$i]["image_thumb_srcand "] + "'>"
);
}
var wait = setTimeout(function () {
$("#lower_slider")
.find("img")
.each(function () {
correct_width += $(this).outerWidth() + 10;
$("#lower_slider").innerWidth(correct_width);
});
}, 1000);
可能有更好的解决方案,但没有其他解决方案对我有用。
此代码使用 Ajax 调用填充图像滑块内的内部 div :
$.ajax({
type: "GET",
dataType: 'json',
url: $(this).attr('href')
}).done(function (result) {
// append thumbnails to lower slider
var correct_width = 0;
for (var $i = 0; $i < result[1].length; $i++) {
$('#lower_slider').append("<img src='" + result[1][$i]['image_thumb_src'] + "'>");
// calculate $('#lower_slider') width
$('#lower_slider').find('img').each(function () {
correct_width += $(this).outerWidth();
});
}
// set $('#lower_slider') width
$('#lower_slider').width(correct_width);
});
此代码的功能在第二次执行时完美运行 - 很明显,它与某些竞争条件有关。那么我该如何消除它们呢?
p.s - 我知道有人问这个问题有不同的用途,但是 none 的建议解决方案对我有用。
谢谢。
看起来第二次成功了,因为请求的图片已经缓存了。
图像加载后尝试计算 correct_width:
var correct_width = 0;
var imgArray = new Array();
var obj = this;
for (var $i = 0; $i < result[1].length; $i++) {
imgArray[$i] = new Image();
imgArray[$i].src = result[1][$i]['image_thumb_src'];
imgArray[$i].onload = function() {
$('#lower_slider').append("<img src='" + this.src + "'>");
correct_width += $(obj).outerWidth();
}
}
我还没有测试过这段代码。不过应该没问题。
嗯,我让它工作的唯一方法是在调整大小和宽度计算之前设置延迟:
var correct_width = 0;
for (var $i = 0; $i < result[1].length; $i++) {
$("#lower_slider").append(
"<img src=" + result[1][$i]["image_thumb_srcand "] + "'>"
);
}
var wait = setTimeout(function () {
$("#lower_slider")
.find("img")
.each(function () {
correct_width += $(this).outerWidth() + 10;
$("#lower_slider").innerWidth(correct_width);
});
}, 1000);
可能有更好的解决方案,但没有其他解决方案对我有用。