Вызвать функцию один раз в очереди jquery ready - PullRequest
1 голос
/ 18 мая 2011

У нас есть код, который выделяет несколько блоков сценариев, которые добавляют идентичные функции в очередь, которая вызывается, когда документ готов.Например:

$(document).ready(function(){
    alert('hey');
});
$(document).ready(function(){
    alert('hey');
});
$(document).ready(function(){
    alert('hey');
});

Это не вызывает каких-либо проблем, но, конечно, нет необходимости вызывать один и тот же код несколько раз.

Без изменения кода, который генерирует повторяющиеся блоки, есть лиспособ заставить jquery только запустить первый блок кода и пропустить остальные?

Имейте в виду, что есть вероятность, что готовая очередь имеет другие функции до и после повторного кода.

1 Ответ

1 голос
/ 18 мая 2011

Я бы использовал литерал объекта для переноса дублирующегося кода и установил логическое значение, когда он был вызван один раз, чтобы он больше не запускался:

$(document).ready(function(){
    DuplicateHelper.SomeMethod1();
});
$(document).ready(function(){
    DuplicateHelper.SomeMethod1();
});
$(document).ready(function(){
    DuplicateHelper.SomeMethod1();
});

var DuplicateHelper = {
    HasMethod1Run: false,

    SomeMethod1: function() {
        if (!this.HasMethod1Run) {
            // do logic

            this.HasMethod1Run = true;
        }
    }
}

EDIT

Вам не нужно использовать литерал объекта для кода, если вы генерируете код динамически, но вы можете использовать тот же принцип с логическим значением:

var runCode = true;

$(document).ready(function(){
    if (runCode) {
        DuplicateHelper.SomeMethod1();
        runCode = false;
    }
});
$(document).ready(function(){
    if (runCode) {
        DuplicateHelper.SomeMethod1();
        runCode = false;
    }
});
$(document).ready(function(){
    if (runCode) {
        DuplicateHelper.SomeMethod1();
        runCode = false;
    }
});

Однако я согласен с netbrain в том, что эта ситуация свидетельствует о проблемах в других частях архитектуры вашего решения.

...