我写了一个片段,它应该从1到1000或预定义的数字开始计数。
由于需要脚本多次,我认为将它作为一个对象编写并使用它多次是一个好主意。但我得到一个错误:
未捕获的ReferenceError:未定义root (匿名函数)
我错了什么?
var time = function() {
var root = this;
var i=0;
root.max = 1000;
root.elm = false;
root.runTime = function() {
if(root.elm != false) {
if (i < root.max) {
i++;
root.elm.text(i);
} else {
clearInterval(root.interval);
}
}
this.interval = setInterval('root.runtTime()', 5);
};
};
if($(document).ready(function() {
var countUp= new time();
countUp.max = 1526;
countUp.elm = $("#elm");
countUp.runTime();
});
答案 0 :(得分:6)
这是因为以下一行:
this.interval = setInterval('root.runtTime()', 5);
因为它是一个字符串has to be evaluated as a global object。
更改为以下内容以确保相同的范围:
this.interval = setInterval(root.runtTime, 5);
此外还有一个拼写错误(runtTime
应为runTime
),因此请更改为以下内容:
this.interval = setInterval(root.runTime, 5);
最后,您使用setInterval
,每5ms重复调用一次root.runTime
。如果您希望递归调用,请更改为setTimeout
:
this.interval = setTimeout(root.runTime, 5);
或者设置runTime
功能之外的时间间隔:
root.runTime = function() {
if(root.elm != false) {
if (i < root.max) {
i++;
root.elm.text(i);
} else {
clearInterval(root.interval);
}
}
};
this.interval = setInterval(root.runTime, 5);
此外,您不需要if
周围的document.ready
声明。这是一个回调函数,在DOM加载时触发,因此不需要if语句。
$(document).ready(function() {
var countUp= new time();
countUp.max = 1526;
countUp.elm = $("#elm");
countUp.runTime();
});