2012-02-15 26 views
35

Tôi có một vùng chứa (thetext1) với chiều cao được đặt là 360px. "thetext1" chứa hai div - một ở bên trái và một được thả sang bên phải - vào cả hai nội dung được phân phối thông qua cuộc gọi ajax.Chiều cao jQuery() trả về 0 trên div hiển thị - tại sao?

Sẽ có những lúc nội dung trong một hoặc các div khác vượt quá 360px và vì vậy tôi muốn tăng chiều cao của thetext1 cho phù hợp.

mã kiểm tra của tôi

newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 

lợi nhuận 0 - (selector của tôi là đúng như div nhắm mục tiêu là hoàn toàn màu hồng!).

Tại sao điều này? Tôi biết - từ câu trả lời cho các bài đăng trước trên trang web này - rằng giải pháp là thêm tràn: ẩn thetext1, nhưng tôi muốn hiểu lý do tại sao nỗ lực của tôi để có được chiều cao của rh và div lhs là không.

+1

Nếu các yếu tố đang nổi bạn có thể cần phải chứa chúng bằng cách thiết lập tràn: ẩn trên hộp giới hạn hoặc thanh toán bù trừ phao nổi trong phần tử tiếp theo – Alex

+1

Các phần tử có chứa đều được thả nổi (trái và phải) không? Bạn có thể phải xóa phần nổi trên vùng chứa để nó chứa các con của nó. –

+1

Bạn nói nội dung được gửi qua cuộc gọi ajax. Bạn có đang đọc chiều cao sau cuộc gọi ajax không? –

Trả lời

28

Hãy chắc chắn rằng mã là bên trong $ (window) .load [không $ (document) .ready]

$(window).load(function() { 
    newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 
}); 
+0

Bạn có thể vui lòng giải thích lý do tại sao chúng tôi sẽ sử dụng window.load thay vì document.ready trong trường hợp này hoặc tương tự? Cảm ơn! –

+1

Thành thật mà nói, tôi không chắc chắn 100%. Nó chỉ làm việc mặc dù. Tôi đoán là document.ready chỉ là vậy thôi. Các phần tử của tài liệu được tải xuống và DOM là 'sẵn sàng' trong khi window.load có nghĩa là cửa sổ đã được tải và kích thước đã được tính toán. – Gazzer

+1

@Gazzer.chiều cao đã trở lại 0 đối với tôi trong các trình duyệt webkit như Opera và Chrome. Sử dụng $ (window) .load (function() {}); đã làm cho tôi. Cảm ơn – Muk

7

Bạn vẫn có thể sử dụng $ (tài liệu) .ready miễn là bạn kiểm tra xem liệu phần tử có được tải trước hay không. Tôi đã chọn để đi với

$("_element name/id_").load(function() { 
     $(this).height(); 
}); 

tôi ban đầu được tìm thấy giải pháp ở đây: http://www.fortwaynewebdevelopment.com/jquery-width-or-height-always-returns-0-fix/

Và đã chọn để sử dụng các câu trả lời trong câu trả lời đầu tiên.

7

Tôi đã gặp vấn đề tương tự và tôi nhận thấy một điều, div cần hiển thị khi bạn gọi .height();

Nhưng, ngay cả khi div hiển thị, cha mẹ của div này cần được hiển thị. Vì vậy, bạn phải garantee rằng cha mẹ div có thể nhìn thấy (hiển thị! = None)

viết một $('#div').parent().show(); sẽ làm cho cha mẹ có thể nhìn thấy, bạn có thể cần anothers parent().show();

+0

Tôi nghĩ rằng đây có thể là vấn đề. Nhưng trong trường hợp của tôi, tôi có một hộp giới hạn với hai hình ảnh bên trong. Một là nhỏ, trong hộp, nó được chiều cao đó. Nhưng khác đi qua ranh giới (ranh giới có tràn tràn). 0 chiều cao được trả lại trên cái đó. Hộp giới hạn không hiển thị trong khi tìm nạp chi tiết. Vì vậy, nó làm cho nó khó để tin rằng đây sẽ là nó. Tất cả các chiều cao được nắm bắt đúng sau đó làm các chức năng khác. –

0
newhgt = $('#thetext1').find('div.rhs').css("background", "pink")[0].getBoundingClientRect().height; 
Các vấn đề liên quan