Элемент jQuery существует событие - PullRequest
6 голосов
/ 28 августа 2011

Существует ли событие или простая функция для вызова обратного вызова, если на странице существует определенный элемент. Я не спрашиваю, как проверить, существует ли элемент.

в качестве примера

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

Я закончил использовать событие готовности

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

Ответы [ 3 ]

3 голосов
/ 28 августа 2011

Плагин LiveQuery jQuery - это то, что большинство людей используют для решения этой проблемы.

Live Query использует всю мощь селекторов jQuery, связывая события или запуск колбэков для согласованных элементов автоматически, даже после страница была загружена, а DOM обновлен.

Вот быстрый jsfiddle, который я собрал, чтобы продемонстрировать это: http://jsfiddle.net/87WZ3/1/

Вот демонстрация запуска события при каждом создании div и записи уникального идентификатора только что созданного div: http://jsfiddle.net/87WZ3/2/

3 голосов
/ 04 декабря 2012

У меня была такая же проблема, поэтому я решил написать плагин для нее: https://gist.github.com/4200601

$(selector).waitUntilExists(function);

Код:

(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));
1 голос
/ 28 августа 2011

Посмотрите на функцию .live.Он выполняется для всех текущих и будущих элементов в селекторе.

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

...