Ich habe eine HTML/JavaScript-Anwendung, die N Spalten enthält, die groß genug sein müssen alle möglichen LI-Elemente aus allen Spalten enthalten.JavaScript Größe der UL-Element nicht ändern manchmal beim Einfügen von LI-Elementen mit Jquery
Die einfache Lösung scheint die Höhen aller Elemente in jeder Spalte zu zählen, das Auffüllen auszugleichen und dann die Höhe auf diese Summe für jede der Spalten festzulegen.
Das funktioniert gut, wenn die LI-Elemente Klartext enthalten. Wenn die LI-Elemente stattdessen Bilder enthalten, haben leider verschiedene Browser Probleme. Zum Beispiel, wenn ich die Seite zum ersten Mal in FireFox lade, sieht es aus wie der Screenshot unten, aber bei einer anderen Aktualisierung funktioniert es gut. Es funktioniert auch nicht wie erwartet in Chrome.
Meine Anwendung nicht die LI-Elemente vorab füllen, wenn die Seite geladen wird - es verwendet JavaScript, wie folgt:
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;
}
Wenn die Seite geladen wurde, eine Ajax-Anforderung holt alle der Objekte, die in LI-Elemente eingefügt werden sollen, und ruft dann die erste oben genannte Funktion auf.
Nachdem alle der LI-Elemente erstellt werden, nenne ich diese Funktion direkt nach dem es:
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");
}
Gibt es eine Möglichkeit jQuery zu sagen, „Nenn() nicht vergrößert werden, bis alle der LI sind voll geladen und die Bilder haben gerendert "?
Ich denke, was passiert ist, dass auf der ersten Seite laden, die Höhe dieser LI-Elemente ist 0 oder ein kleiner Wert, weil es das Bild nicht enthält, so berechnet meine Größe Funktion das falsche Ergebnis (ich testete dies mit einigen Warnmeldungen). Solange die LIs gefüllt sind und die Bilder geladen sind, wird die Gesamthöhe gut berechnet.
Irgendwelche Hilfe? Danke
Wo genau in Ihrem Code rufen Sie die 'resize()' Funktion auf? Von dem was ich hier sehen kann, kannst du es einfach am Ende von 'populateUnsetAnswers()' nennen und 'JavaScript' wird die Größenänderung genau richtig machen. –
@KemalFadillah Ja, resize() wird direkt nach populateUnsetAnswers() aufgerufen. Dies funktioniert nur in Firefox, wenn Sie eine Seite aktualisieren. In Chrome funktioniert es immer noch nicht. –
@FireEmblem Sie müssen keine Höhe einstellen, die Spalten werden vertikal erweitert, um dem Inhalt zu entsprechen. –