2012-02-21 37 views
5

Tôi có một số mã được bao bọc trong $(document).ready(function(){ /*code*/ }); và tất cả đều hoạt động tốt, ngoại trừ một dòng. Mã trên nó hoạt động tốt, mã bên dưới nó hoạt động tốt, tôi không nhận được bất kỳ lỗi nào trong bảng điều khiển của tôi.

$('.main-right.category').height($('.footer').height() + $('.main-right.category').height()); 

Điều đó không kích hoạt. Tuy nhiên, nếu tôi dán chính xác trong bảng điều khiển dành cho nhà phát triển và nhấn enter sau khi trang đã tải, nó sẽ hoạt động. Tất cả các phần tử tồn tại khi tải trang (có nghĩa là không có phần tử nào được xây dựng động qua javascript). Cùng một kết quả trong chrome, firefox, IE.

Bất kỳ ý tưởng nào?

chỉnh sửa: Tôi nên thêm rằng css của tôi được tải trước javascript của tôi và tôi đã thực hiện các chỉnh sửa CSS khác có liên quan trong cùng một tệp javascript đã hoạt động tốt.

Ngoài ra, nếu tôi console.log $ ('. Main-right.category'). Height() và $ ('. Footer'). Height() ngay trên dòng mã đó, cả hai đều cho không không có giá trị số nguyên như tôi mong đợi.

+0

Không có lỗi trong bảng điều khiển? Bạn có thể đăng liên kết tới trang không? –

+1

Nếu không có phần còn lại của mã, điều duy nhất tôi có thể nghĩ là phần tử DOM mà bạn đang nhắm mục tiêu chưa được tải trong DOM tại thời điểm câu lệnh này được thực hiện. Bởi thời gian bạn nhận được vào giao diện điều khiển của khóa học của nó ở đó và tuyên bố này hoạt động. –

+0

Đăng jsFiddle? – j08691

Trả lời

5

Ngọn lửa kiện đã sẵn sàng khi DOM đã sẵn sàng để làm việc với. Nó khác với sự kiện tải cháy khi tất cả các tài sản (css, javascript, hình ảnh, ...) đều được tải.

Tôi đoán rằng khi bạn chạy mã, các yếu tố bạn đang cố gắng lấy chiều cao không có chiều cao được tính toán nên có vẻ như không có gì xảy ra.

Khi bạn thực thi mã của mình trong bảng điều khiển, mọi thứ đều được tải để hành vi được mong đợi.

Để liên kết với sự kiện tải, hãy kiểm tra phương thức .load().

+0

Liên kết không phải là liên kết phù hợp, phải http://api.jquery.com/load-event/ –

+0

$ (cửa sổ) .load đã hoạt động, nhưng tôi không hiểu tại sao. Nếu tôi console.log $ ('. Main-right.category'). Height() và $ ('. Footer'). Height() ngay trên dòng mã không hoạt động trong $ (tài liệu) .ready(), cả hai đều cung cấp các giá trị số nguyên khác như tôi mong đợi và các giá trị giống nhau mà tôi nhận được thực thi cùng một dòng mã thông qua bảng điều khiển dành cho nhà phát triển. – LOLapalooza

0

i thường được thiết lập chiều cao với:

var height = $('.footer').height() + $('.main-right.category').height(); 
$('.main-right.category').css('height',height+'px'); 
+0

Đã thử rằng quá, không hoạt động. Thật kỳ lạ, bởi vì nếu tôi console.log $ ('. Main-right.category'). Height() và $ ('. Footer'). Height() ngay trên các dòng mã, cả hai đều cung cấp các giá trị số nguyên khác không như tôi mong đợi – LOLapalooza

+0

@ RickM Đó là vì khi bạn sử dụng bàn điều khiển để chèn mã, trang đã tải xong nhưng nó chưa tải xong khi sự kiện 'document.ready' kích hoạt. Khi sự kiện 'window.load' kích hoạt, tất cả nội dung trong tài liệu đã được tải. – Jasper

+0

@ Tôi hiểu, cảm ơn vì sự thấu hiểu. Tôi figured bằng cách đặt console.log (var) trong tập tin javascript, nó sẽ đăng nhập bất cứ điều gì var là tại thời điểm thực hiện. – LOLapalooza

3

$ (tài liệu) .ready cháy khi cấu trúc DOM có sẵn, tại thời điểm này kết xuất không được hoàn thành, do đó kích thước của các phần tử có thể chưa biết và chiều cao() sẽ trả về giá trị sai.

Sử dụng $(window).load() để thay thế.

0

Bạn nên sử dụng console để gỡ lỗi bộ chọn và xem chiều cao của các phần tử;

$(document).ready(function() { 

    var $footer = $('.footer'); 
    var $category = ('.main-right.category'); 

    console.log($category, $footer); 
    console.log($category.height(), $footer.height()); 
    console.log('New height =', ($category.height() + $footer.height())); 

}); 
Các vấn đề liên quan