Сохраните setInterval для очистки позже - PullRequest
3 голосов
/ 10 декабря 2011

Я работаю над плагином jQuery, который использует интервалы JavaScript.Однако, когда плагин вызывается снова с аргументом running как false, тогда я хочу, чтобы предыдущий интервал, вызванный для этого конкретного элемента DOM, был очищен.

Вот некоторый сокращенный код:

(function ($) {
    $.fn.examplePlugin = function (running) {
        return this.each(function () {
            if (running === false) {
                // Clear the previous interval assigned to this DOM element
            } else {
                setInterval(function () {
                    // Interval code
                }, 50);
            }

           return this;
        });
    };
})(jQuery);

Как это возможно?Я думал об использовании глобальных переменных для хранения интервалов, но я не хочу этого делать.Я также понятия не имею, как назначить интервал для определенного элемента DOM.

1 Ответ

4 голосов
/ 10 декабря 2011

Если вы хотите сохранить интервалы для каждого элемента DOM, вам лучше всего использовать .data(), который делает именно то, что вы хотите - установка данных для определенного элемента DOM.

var saved = $(this).data("__examplePlugin_interval");

if (saved) { // I think you mean when it *is* running
    clearInterval(saved);
    $(this).removeData("__examplePlugin_interval");
} else {
    var interval = setInterval(function () {
        // Interval code
    }, 50);

    // choose a name that won't be accidentally overwritten by others
    $(this).data("__examplePlugin_interval", interval);
}
...