Tôi có ứng dụng Html/JavaScript chứa N cột cần đủ lớn chứa tất cả các phần tử LI có thể có từ tất cả các cột.JavaScript không thay đổi kích thước chiều cao của phần tử UL đôi khi khi chèn các phần tử LI bằng cách sử dụng Jquery
Giải pháp đơn giản dường như đếm chiều cao của tất cả các mục trong mỗi cột, bù cho đệm, sau đó đặt chiều cao cho tổng số đó cho từng cột.
Điều này hoạt động tốt khi các phần tử LI chứa văn bản thuần túy. Thật không may, khi các yếu tố LI chứa hình ảnh thay vào đó, các trình duyệt khác nhau có vấn đề. Ví dụ, khi tôi lần đầu tiên tải trang trong FireFox, nó trông giống như ảnh chụp màn hình dưới đây, nhưng khi làm mới khác, nó hoạt động tốt. Nó không hoạt động như mong đợi trong Chrome.
ứng dụng của tôi không điền trước các yếu tố LI khi tải trang - nó sử dụng JavaScript, như sau:
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;
}
Khi trang web được thực hiện tải, một yêu cầu ajax lấy về tất cả của các đối tượng được đưa vào các phần tử LI và sau đó gọi hàm đầu tiên ở trên.
Sau khi tất cả các yếu tố LI được tạo ra, tôi gọi chức năng này ngay sau khi nó:
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");
}
Có cách nào để nói với jQuery, "Đừng gọi thay đổi kích thước() cho đến khi tất cả các của LI là được tải đầy đủ và hình ảnh đã hiển thị "? Tôi nghĩ rằng những gì đang xảy ra là khi tải trang ban đầu, chiều cao của các phần tử LI là 0 hoặc một giá trị nhỏ vì nó không chứa hình ảnh, vì vậy chức năng thay đổi kích thước của tôi đang tính toán kết quả sai (tôi đã thử nghiệm điều này). với một số báo cáo cảnh báo). Miễn là các LI được điền và các hình ảnh đã được tải, tổng chiều cao được tính toán tốt.
Bất kỳ trợ giúp nào? Cảm ơn
Trường hợp chính xác trong mã của bạn, bạn đang gọi hàm 'resize()'? Từ những gì tôi có thể thấy ở đây, bạn chỉ có thể gọi nó ở cuối 'populateUnsetAnswers()' và 'JavaScript' sẽ làm thay đổi kích cỡ vừa phải. –
@KemalFadillah Có, thay đổi kích thước() được gọi ngay sau khi điền vàoUnsetAnswers() rồi. Điều này chỉ hoạt động trong firefox khi bạn làm mới trang. Nó vẫn không hoạt động chút nào trong Chrome. –
@FireEmblem bạn không cần đặt chiều cao, các cột sẽ mở rộng theo chiều dọc để vừa với nội dung. –