2012-03-19 26 views
5

Tôi đang gặp sự cố lạ với việc kiểm tra khả năng hiển thị của đối tượng với jQuery.jQuery là (': visible') hoạt động hài hước.

Tôi có kiểm tra JS này:

alert($myObject.css('display')); 
alert($myObject.is(':visible')); 

Đầu tiên cảnh báo hiển thị 'khối' có ý nghĩa như firebug rõ ràng cho thấy rằng nó được thiết lập để display: block và bạn sẽ nhìn thấy đối tượng trên trang trong trình duyệt.

Cảnh báo thứ hai, mặc dù hiển thị 'sai'. Mà không có ý nghĩa gì với tôi cả.

Tôi có hiểu lầm về việc sử dụng (': visible') không?

+2

bạn có thể cung cấp mẫu mã trong jsfiddle không? một số đánh dấu khác sẽ giúp – redDevil

+0

Bạn có nói rằng phần tử của bạn * là * hiển thị trên trang, nhưng '.is (': visible')' là sai? Câu trả lời của @ KARASZI là chính xác, nhưng nếu yếu tố của bạn thực sự có thể nhìn thấy thì đây có thể là một vấn đề khác. Bạn có thể gửi một fiddle sao chép vấn đề? – nrabinowitz

+0

@ j08691 nếu đối tượng được đặt để hiển thị: chặn và tôi có thể thấy nó, tôi mong đợi câu lệnh is() trả về TRUE trong trường hợp này. –

Trả lời

9

Cân nhắc HTML này:

<div id="div1" style="display: none;"> 
    <div id="div2"> 
     <p>Some div content</p> 
    </div> 
</div> 

và JavaScript này:

$myObject = jQuery('#div2'); 
alert($myObject.css('display')); // 'block' 
alert($myObject.is(':visible')); // false 

Có nhiều lý do $myObject có thể không nhìn thấy được, mặc dù nó có display: none phong cách thiết lập. Xem :visible selector docs để biết chi tiết.

Bây giờ có ý nghĩa không?

+0

ngoại trừ việc tôi có thể thấy đối tượng của mình trong trình duyệt - cha mẹ của nó không bị ẩn. –

+0

@DA .: Bạn có chắc chắn không? Cố gắng thao tác '$ myObject' từ việc sử dụng JavaScript (ví dụ: đặt đường viền của nó thành màu đỏ) và cho chúng tôi biết nếu kết quả như mong đợi. Nếu thao tác '$ myObject' thay đổi những gì bạn thấy trong trình duyệt, hãy cung cấp cho chúng tôi thêm chi tiết - cố gắng thu hẹp sự cố bằng cách trích xuất mã hiển thị kết quả chính xác và hiển thị mã này cho chúng tôi. – Tadeck

+0

vâng, đã làm toàn bộ BORDER hack để xem đó có phải là đối tượng thích hợp không. Tôi sẽ cố gắng tháo dỡ trang để xem liệu tôi có thể tìm nguồn gốc của sự cố và đăng đánh dấu hay không. –

4

Bộ chọn :visible không tương đương với thuộc tính css display.

Từ các tài liệu liên quan, có thể nhìn thấy là false khi:

  • Họ có một giá trị hiển thị CSS của ai sánh kịp.
  • Chúng là các phần tử biểu mẫu có loại = "ẩn".
  • Chiều rộng và chiều cao của chúng được đặt rõ ràng là 0.
  • Phần tử tổ tiên bị ẩn, do đó phần tử không được hiển thị trên trang.
+0

Đã hiểu. Không ai trong số đó là đúng trong tình huống này. Nó được thiết lập để hiển thị: khối, nó không phải là một yếu tố hình thức ẩn, nó không có chiều cao rõ ràng hoặc chiều rộng bằng không và bạn có thể nhìn thấy nó trên trang (vì vậy nó là tổ tiên không xuất hiện để được ẩn) –

+0

Tôi đang mong chờ jsFiddle liên kết, tôi thực sự tò mò về nguyên nhân của vấn đề. –

+0

Tôi đã thêm câu trả lời giải thích những gì đã xảy ra. Tôi hơi xấu hổ. ;) –

3

Từ các tài liệu :visible Selector:

Elements có thể được coi ẩn vì nhiều lý do:

  • Họ có một giá trị hiển thị CSS của ai sánh kịp.
  • Chúng là các phần tử biểu mẫu có loại = "ẩn".
  • Chiều rộng và chiều cao của chúng được đặt rõ ràng là 0.
  • Phần tử tổ tiên bị ẩn, do đó phần tử không được hiển thị trên trang.

Kiểm tra xem không có điều kiện nào trong các điều kiện này là đúng.

1

Vì vậy, câu trả lời:

Nếu ai đó gắn một sự kiện CLICK để đối tượng của bạn mà bạn trước đây không biết, sự kiện đó có thể được điều chỉnh các bất kỳ logic bạn đang cố gắng để sử dụng.;)

Than ôi, đó là những gì đã xảy ra ở đây. Một sự kiện nhấp chuột khác đã được đính kèm với đối tượng này đã được đặt để ẩn cha mẹ của nó. Đó là bắn đầu tiên - trước khi logic của tôi kiểm tra xem nó có nhìn thấy không.

Cuối cùng: lỗi người dùng.

Sẽ có một số hình thức phạt danh tiếng khi đó là sự cố do người dùng gây ra. ;)

+0

Cảm ơn bạn đã chia sẻ. –

Các vấn đề liên quan