1

我们的代码会输出几个脚本块,这些脚本块将相同的函数添加到文档准备好时调用的队列中。例如:

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

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

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

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

4

1 回答 1

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

于 2011-05-18T08:20:31.813 回答