2011-08-28 70 views
6

Có sự kiện hoặc chức năng đơn giản để gọi lại gọi lại khi một phần tử cụ thể tồn tại trên trang. Tôi không hỏi cách kiểm tra xem có tồn tại một phần tử hay không.Sự kiện tồn tại của phần tử jQuery

làm ví dụ

$("#item").exists(function(){ }); 

tôi đã kết thúc bằng sự kiện sẵn sàng

$("#item").ready(function(){ }); 
+2

Bạn muốn làm gì? –

+0

Chức năng sẵn sàng dường như không hoạt động theo cách này @Drake. Xem fiddle này như là một ví dụ: http://jsfiddle.net/YDn5f/ –

Trả lời

1

Hãy nhìn vào các chức năng .live. Nó thực hiện trên tất cả các phần tử hiện tại và tương lai trong bộ chọn.

$ ('div'). Live (function() {});

3

LiveQuery Plugin jQuery dường như là những gì hầu hết mọi người đang sử dụng để giải quyết vấn đề này.

Sống Query sử dụng sức mạnh của bộ chọn jQuery bởi các sự kiện ràng buộc hoặc bắn callbacks cho các yếu tố phù hợp với tính năng tự động một cách kỳ diệu, ngay cả sau khi trang đã được tải và DOM cập nhật.

Dưới đây là một jsfiddle nhanh chóng mà tôi đặt lại với nhau để chứng minh điều này: http://jsfiddle.net/87WZ3/1/

Dưới đây là một bản demo của bắn một sự kiện mỗi lần một div được tạo ra và viết ra id duy nhất của div vừa được tạo ra: http://jsfiddle.net/87WZ3/2/

+1

Đây chính xác là những gì tôi đang tìm kiếm !!! THX – user357034

3

tôi đã có vấn đề này, vì vậy tôi đã đi trước và đã viết một plugin cho nó: https://gist.github.com/4200601

$(selector).waitUntilExists(function);

Mã số:

(function ($) { 

/** 
* @function 
* @property {object} jQuery plugin which runs handler function once specified element is inserted into the DOM 
* @param {function} handler A function to execute at the time when the element is inserted 
* @param {bool} shouldRunHandlerOnce Optional: if true, handler is unbound after its first invocation 
* @example $(selector).waitUntilExists(function); 
*/ 

$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) { 
    var found  = 'found'; 
    var $this  = $(this.selector); 
    var $elements = $this.not(function() { return $(this).data(found); }).each(handler).data(found, true); 

    if (!isChild) 
    { 
     (window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] = 
      window.setInterval(function() { $this.waitUntilExists(handler, shouldRunHandlerOnce, true); }, 500) 
     ; 
    } 
    else if (shouldRunHandlerOnce && $elements.length) 
    { 
     window.clearInterval(window.waitUntilExists_Intervals[this.selector]); 
    } 

    return $this; 
} 

}(jQuery)); 
+0

Điều này hoạt động tuyệt vời - Cảm ơn Ryan! – Michael

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