在jquery就绪队列中调用一次函数

时间:2011-05-18 08:07:24

标签: javascript jquery code-duplication

我们有一些代码可以吐出几个脚本块,这些脚本块在文档准备就绪时会调用队列。例如:

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

这不会导致任何问题,但当然不必多次调用相同的代码。

如果不更改生成重复块的代码,有没有办法让jquery只运行第一个代码块并跳过其余代码块?

请记住,就绪队列有可能在重复代码之前和之后具有其他功能。

1 个答案:

答案 0 :(得分:1)

我会使用一个对象文字来包装重复的代码,并在调用一次时设置一个布尔值,这样它就不会再次运行了:

$(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;
        }
    }
}

修改

如果要动态生成代码,则不必使用对象文字作为代码,但是您可以使用与布尔值相同的原则:

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的观点,即这种情况表明解决方案架构中存在其他问题。