我们有一些代码可以吐出几个脚本块,这些脚本块在文档准备就绪时会调用队列。例如:
$(document).ready(function(){
alert('hey');
});
$(document).ready(function(){
alert('hey');
});
$(document).ready(function(){
alert('hey');
});
这不会导致任何问题,但当然不必多次调用相同的代码。
如果不更改生成重复块的代码,有没有办法让jquery只运行第一个代码块并跳过其余代码块?
请记住,就绪队列有可能在重复代码之前和之后具有其他功能。
答案 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的观点,即这种情况表明解决方案架构中存在其他问题。