簡體   English   中英

Javascript setInterval沒有使其起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM