Tengo una aplicación Html/JavaScript que contiene N columnas que deben ser lo suficientemente grandes para contener todos los elementos LI posibles de todas las columnas.JavaScript no cambia el tamaño de la altura del elemento UL a veces al insertar elementos LI usando Jquery
La solución simple parece contar las alturas de todos los elementos en cada columna, compensar el relleno y luego establecer la altura en ese total para cada una de las columnas.
Esto funciona muy bien cuando los elementos LI contienen texto sin formato. Desafortunadamente, cuando los elementos LI contienen imágenes, varios navegadores tienen problemas. Por ejemplo, cuando primero carga la página en FireFox, se parece a la siguiente captura de pantalla, pero con otra actualización, funciona bien. Tampoco funciona como se esperaba en Chrome.
Mi aplicación no rellenar previamente los elementos LI cuando se carga la página - que utiliza JavaScript, de la siguiente manera:
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;
}
Cuando la página se realiza la carga, una petición AJAX Obtiene todas las de los objetos que se colocarán en elementos LI, y luego llama a la primera función de arriba.
Después de que todos los elementos LI son creados, que llamo esta función justo después de que:
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");
}
¿Hay alguna manera de saber jQuery: "No llamo cambiar el tamaño() hasta que todo el LI'S están completamente cargado y las imágenes han renderizado "?
Creo que lo que sucede es que en la carga de la página inicial, la altura de estos elementos LI es 0 o un valor pequeño porque no contiene la imagen, por lo que mi función de ajuste de tamaño está calculando el resultado incorrecto (Probé esto con algunas declaraciones de alerta). Mientras que los LI se llenen y las imágenes se hayan cargado, la altura total se calcula muy bien.
¿Algún ayuda? Gracias
¿En qué parte de su código llama exactamente a la función 'resize()'? Por lo que puedo ver aquí, puede simplemente llamarlo al final de 'populateUnsetAnswers()' y 'JavaScript' hará el cambio de tamaño a la perfección. –
@KemalFadillah Sí, resize() se llama justo después de poblarUnsetAnswers() ya. Esto funciona en Firefox solo cuando realizas una actualización de página. Todavía no funciona en absoluto en Chrome. –
@FireEmblem no necesita establecer una altura en absoluto, las columnas se expandirán verticalmente para ajustarse al contenido. –