У меня есть приложение Html/JavaScript, которое содержит N столбцов, которые должны быть достаточно большими, содержат все возможные элементы 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: "Не вызывайте resize(), пока все LI не будут полностью загружены и изображения будут отображаться"?
Я думаю, что происходит то, что при начальной загрузке страницы высота этих элементов LI равна 0 или маленькому значению, потому что она не содержит изображения, поэтому моя функция изменения размера вычисляет неправильный результат (я тестировал это с помощью некоторые предупреждения). Пока LI заполняются и загружаются изображения, общая высота вычисляется просто отлично.
Любая помощь? Благодаря