2012-05-14 22 views
14

thể trùng lặp:
jQuery event to trigger action when a div is made visiblejQuery kiện - yếu tố trở nên hữu hình

Làm thế nào tôi có thể chạy một số mã của tôi khi yếu tố, mà đã được nạp bởi ajax, trở nên hữu hình ("hiển thị" là chuyển từ "không" thành "chặn")? Vâng, tôi cần một số sự kiện như

$('#element').live('show', function(){ 
// CODE 
}); 

Hoặc trường hợp xem để xóa/thêm một số lớp để yếu tố

+0

Ý anh là gì bằng cách nạp bởi Ajax? bạn đang sử dụng một cuộc gọi jquery ajax? – Liam

+0

Tôi đang thêm

...
bởi $ .ajax(), có một số hàm, tùy thuộc vào tình hình thay đổi khả năng hiển thị của phần tử này .. Tôi không thể thay đổi các chức năng thay đổi khả năng hiển thị của phần tử, nhưng tôi cần để chạy mã của tôi khi phần tử được hiển thị (lớp đã loại bỏ mà addind "display: none" thành phần tử css) –

+0

Xong. Sử dụng setInterval. Xem câu trả lời của tôi dưới đây. – iambriansreed

Trả lời

3

Vấn đề đã được giải quyết bằng cách sử dụng jquery-xuất hiện Plugin

https://github.com/morr/jquery.appear

+0

Đó là một liên kết đã chết ngay bây giờ. Đã cập nhật –

+0

* liên kết * –

2

Không có gì built-in jQuery cho phép bạn đạt được điều đó là. Bạn có thể xem livequery plugin. Ví dụ:

$('#element').livequery(function() { 
    // CODE 
}); 

Khi phần tử có id = "phần tử" được thêm vào DOM, gọi lại sẽ được thực thi.

+3

Hàm '.live()', '.delegate()' và '.on()' sẽ muốn có một từ với bạn ... –

+4

Họ có thể muốn có một từ, nhưng OP thì không. Anh ấy không cần đăng ký các sự kiện cho các điều khiển được thêm động. Anh ấy muốn đăng ký một sự kiện được kích hoạt khi một phần tử được thêm vào DOM mà không phải là điều tương tự. –

+3

Tôi không đồng ý. Sự hiểu biết của tôi là anh ta muốn chức năng gọi lại được kích hoạt khi các phần tử được thêm động hiển thị (tức là chuyển từ 'display: none' thành' display: block'), không phải khi chúng được thêm vào DOM. –

1

Chạy kiểm tra sau mỗi 1 giây. Nếu tồn tại #element và hiển thị thì hãy xóa (dừng) khoảng thời gian và thực thi mã của bạn.

var checkVisible = setInterval(function(){ 

    // if element doesn't exist or isn't visible then end 
    if(!$('#element').length || !$('#element').is(':visible')) 
     return; 

    // if element does exist and is visible then stop the interval and run code 

    clearInterval(checkVisible); 

    // place your code here to run when the element becomes visible 

},1000); 

Chắc chắn bạn có một số lời gọi sự kiện jQuery hiển thị phần tử; trong những lời gọi sự kiện này, bạn nên đặt mã chạy 'khi phần tử có thể nhìn thấy' của bạn.

+5

nó quá vô lý –

+0

Hãy giải nén cho tôi? Tiềm năng? – iambriansreed

+1

Ông có nghĩa là phải có một phương pháp tốt hơn, kiểm tra một cái gì đó mỗi giây là một chút brute-lực. Trong thời đại của các sự kiện, điều này thật kỳ quặc. – Firsh

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