我有一个包含 N 列的 Html/JavaScript 应用程序,这些列需要足够大,包含所有列中所有可能的 LI 元素。
简单的解决方案似乎计算每列中所有项目的高度,补偿填充,然后将高度设置为每列的总高度。
当 LI 元素包含纯文本时,这很有效。不幸的是,当 LI 元素包含图像时,各种浏览器都会出现问题。例如,当我第一次在 FireFox 中加载页面时,它看起来像下面的屏幕截图,但在再次刷新时,它工作正常。它在 Chrome 中也无法按预期工作。
我的应用程序在页面加载时没有预先填充 LI 元素 - 它使用 JavaScript,如下所示:
function populateUnsetAnswers(unsetCategoryAnswers) {
for (i in unsetCategoryAnswers) {
if (unsetCategoryAnswers.hasOwnProperty(i.toString())) {
$('#categoryQuestionArea #possibleAnswers').append(
categoryAnswerLiTag(unsetCategoryAnswers[i])
);
}
}
}
function categoryAnswerLiTag(unsetCategoryAnswer) {
var html = '<li id="' + unsetCategoryAnswer.id + '">';
if (unsetCategoryAnswer.image) {
html += '<img class="categoryAnswerImage" title="';
html += unsetCategoryAnswer.text;
html += '" src="/trainingdividend/rest/streaming/';
html += unsetCategoryAnswer.image.fileName;
html += '" style="height: ';
html += unsetCategoryAnswer.image.height;
html += ';';
html += '" />';
} else {
html += unsetCategoryAnswer.text
}
html += '</li>';
return html;
}
页面加载完成后,ajax 请求获取所有要放入 LI 元素的对象,然后调用上面的第一个函数。
在创建了所有 LI 元素之后,我在它之后调用这个函数:
function resize() {
var currentHeight, totalHeight;
totalHeight = 0;
$("#categoryQuestionArea ul").children().each(function() {
currentHeight = $(this).height();
totalHeight += currentHeight + 13;
});
$("#categoryQuestionArea ul").height(totalHeight);
$("#categoryQuestionArea div#separator").css("padding-top", (totalHeight / 2) + "px");
}
有没有办法告诉 jQuery,“在所有 LI 都完全加载并且图像已经渲染之前,不要调用 resize()”?
我认为发生的事情是在初始页面加载时,这些 LI 元素的高度为 0 或一个较小的值,因为它不包含图像,所以我的 resize 函数正在计算错误的结果(我用一些警报语句对此进行了测试)。只要填充了 LI 并且加载了图像,就可以很好地计算总高度。
有什么帮助吗?谢谢