[英]Javascript setInterval not making it into function
好的,我试图将setInterval放入子函数中并且没有使其进入那里...因此我的警报没有触发:
var doneVar= 0;
var groupsVar= 4;
var interval = setInterval(process_chunk, 1000);
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;
process_chunk = function() {
alert("we are after chunk");
var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength);
//alert("we are in function!!");
$.each(arrayChunk, function(key, item){
$myTree.jstree("uncheck_node", "#"+item);
});
doneVar += 1;
if (doneVar === groupsVar) {
interval.clearInterval();
}
}
当您将其传递给setInterval时,尚未为process_chunk
分配值。 移动线:
var interval = setInterval(process_chunk, 1000);
在将匿名函数分配给process_chunk
之前(之后):
doneVar += 1;
或者,如果您要提升函数,请使用函数声明而不是表达式:
function process_chunk() {
两种版本都可以解决您的问题。
您需要在使用函数之前声明该函数。
把process_chunk = function() { ... });
之前var interval = setInterval(process_chunk, 1000);
如果您仅在间隔内使用函数,请使用此方法(我的首选方法,您的方法没有错)
var doneVar= 0;
var groupsVar= 4;
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;
var interval = setInterval(function() {
alert("we are after chunk");
var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength);
//alert("we are in function!!");
$.each(arrayChunk, function(key, item){
$myTree.jstree("uncheck_node", "#"+item);
});
doneVar += 1;
if (doneVar === groupsVar) {
interval.clearInterval();
}
},1000);
应该这样做,以这种方式执行并在间隔内定义函数可以避免很多问题,例如在这种情况下,您需要先定义函数,然后再将其设置为间隔。 这是另一个保留您风格的版本。
var doneVar= 0;
var groupsVar= 4;
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;
var process_chunk = function() {
alert("we are after chunk");
var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength);
//alert("we are in function!!");
$.each(arrayChunk, function(key, item){
$myTree.jstree("uncheck_node", "#"+item);
});
doneVar += 1;
if (doneVar === groupsVar) {
interval.clearInterval();
}
}
var interval = setInterval(process_chunk, 1000);
我想我刚才注意到的另一件事是,您使用process_chuck
而不是var process_chuck
witch也可能导致问题。 已在第二个答案中修复,不适用于第一个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.