2016-04-01 10 views
0

で終了を持っているにもかかわらず、終了する前に別のラウンドに行くん..しかし、あなたは、このコードを見てみる場合なぜ私のsetIntervalループは、私が最初ゴアのタイトルのために申し訳ありません

var interval = setInterval(function() { 
      if (start == false || score_met == true) { 
       clearInterval(interval); 
      } 

      // call generation again for each generation, passing in the previous generations best offspring 
      best_offspring = generation(best_offspring, characters, target_text, mutation_rate, amount_offspring); 
      document.getElementById("output_text").value = best_offspring; 
      document.getElementById("generations").value = generations; 
      }, delay); 
    }); 

スコアそれまではこれがループまたはstartの値を変更した場合リセットボタンのコードは次のようになります

 //resets 
    $("#reset").click(function() { 
      start = false; 
      score_met = false; 
      generations = 0; 
      best_offspring = ""; 

      document.getElementById("start_text").value = ""; 
      document.getElementById("characters").value = " abcdefghijklmnopqrstuvwxyz"; 
      document.getElementById("target_text").value = "methinks it is like a weasel"; 
      document.getElementById("output_text").value = ""; 
      document.getElementById("mutation_rate").value = 5; 
      document.getElementById("amount_offspring").value = 100; 
      document.getElementById("delay").value = 50; 
     }); 
    }); 

リセットをクリックすると、ループが終了するはずですか?しかし、それは終了する前に別のループを行うようです。何故ですか?私はあなたが

$(interval).ready(function() {...});

ような何かを行うことができますが、その後はかなりわからないイムは何があっ間隔の代わりに配置することを考えていました。

+2

単に 'clearInterval(interval);を実行してください。復帰後に関数を終了するには 'return;'を使います。クリアすると_next_コールが防止され、終了するまで_current_コールが続行されます。コードの残りの部分を 'else'にラップすることもできます。これはコードの残りの部分をスキップし、関数の終わりを示します。 – somethinghere

+1

@何かがうまくいくようです!どうも。 –

答えて

3

コードを説明してください。

var interval = setInterval(function() { 
     if (start == false || score_met == true) { 
      clearInterval(interval); 
     } 

     // call generation again for each generation, passing in the previous generations best offspring 
     best_offspring = generation(best_offspring, characters, target_text, mutation_rate, amount_offspring); 
     document.getElementById("output_text").value = best_offspring; 
     document.getElementById("generations").value = generations; 
     }, delay); 

あなたは大丈夫です間隔をクリアしている、しかしthis part of code has already started executing、そうthe part of the code after if will execute at this moment。だから、他の人の中に入れて、あなたは大丈夫でなければなりません。

var interval = setInterval(function() { 
     if (start == false || score_met == true) { 
      clearInterval(interval); 
     } 
     else{ 
      // call generation again for each generation, passing in the previous generations best offspring 
      // your stuff here 
     }   
     }, delay); 
+0

これらの末尾の中カッコは正しいとは思いません: '});'(彼らはオープニングコードとマッチしていないようです) - しかしこれはうまくいきます。 'return'を使うこともできます。 – somethinghere

+0

@somethinghereはいあなたは正しいです、リターンを使用しても動作します。 –

1

クリア後に機能を終了するには、単にclearInterval(interval); return;を実行します。クリアはコールを防ぎ、それが終了するまで、それはまだ現在通話を継続します:

var interval = setInterval(function() { 
    if (start == false || score_met == true) { 
     clearInterval(interval); 
     return; 
    } 
    /* ... */ 
}, 1000); 

ます。また、コードの残りの部分をスキップしますelse、中にあなたのコードの残りの部分を包むことができ機能を自然に終了させることができます。

関連する問題