2017-05-06 20 views
1

私はjavaScriptを初めて使用しています。私はボタンを呼び出すたびにstart関数を呼び出す必要があります。しかし、それは初めてのことです。その後、ボタンをクリックするたびに何もしません。私を助けてください。 以下は私のhtmlとjsです。ボタンをクリックするたびに関数を呼び出す方法は?

<div class="container"> 
    <h1>Are you ready?</h1> 
    <button id="start">start</button> 
    <h1 id="canvas"></h1> 
</div> 

とJS

var counter = 0; 
var i = 0; 
var words = ['jzg', 'oqs', 'lmb', 'ert', 'pkf', 'lhx', 'dyw']; 
var canvas = document.getElementById('canvas'); 
var btn = document.getElementById('start').addEventListener('click',start); 

function start() { 
function nextWord() { 
    if (counter < words.length) { 
     canvas.innerHTML = words[counter]; 
    } else { 
     return false; 
    } 
    counter++; 
} 

var show = setInterval(nextWord, 1000); 
if (counter > words.length) { 
    clearInterval(show); 
} 

}

答えて

0

あなたの問題は、あなたがstartボタンをクリックすると0counter変数をリセットしていけないということでした。またnextWordの機能の中でclearIntervalをチェックする必要があります。

var counter = 0; 
 
var i = 0; 
 
var words = ['jzg', 'oqs', 'lmb', 'ert', 'pkf', 'lhx', 'dyw']; 
 
var canvas = document.getElementById('canvas'); 
 
var btn = document.getElementById('start').addEventListener('click',start); 
 

 
function start() { 
 

 
    counter = 0; 
 
    var show; 
 
    clearInterval(show) 
 

 
    function nextWord() { 
 
     
 
     console.log('here?'); 
 
     
 
     if (counter >= words.length) { 
 
    
 
      clearInterval(show); 
 
      canvas.innerHTML = ''; 
 
      
 
     } 
 
    
 
     if (counter < words.length) { 
 
     canvas.innerHTML = words[counter]; 
 
     } 
 
     counter++; 
 
     
 
      
 
    } 
 

 
    show = setInterval(nextWord, 1000); 
 
    
 
    
 
    
 

 
}
<div class="container"> 
 
    <h1>Are you ready?</h1> 
 
    <button id="start">start</button> 
 
    <h1 id="canvas"></h1> 
 
</div>

+0

おかげで多く、それが本当に助けました。すべての単語が表示されたら最後の単語を隠すことができますか?それはまだ最後の言葉が現れると思われるので、私はまた、他の単語のように2秒間それを示したいと思います。 – Roni

+0

答えを更新しました。最後の単語を隠すには、間隔を空けるときに 'canvas.innerHTML = '';'を追加します。 – Leguest

+0

ええ、それは私のためにうまくいくでしょう – Roni

0

は、以下のコードを見てみましょう:
1.あなたはclearIntervalを行うことができませんでした。それは間違っていた。

私は、問題のあるコード/動作していないコードにコメントし、古いコードが動作していなかった理由について新しいコードを挿入しました。
希望すると助かります!

var counter = 0; 
 
    var i = 0; 
 
    var words = ['jzg', 'oqs', 'lmb', 'ert', 'pkf', 'lhx', 'dyw']; 
 
    var canvas = document.getElementById('canvas'); 
 
    var btn = document.getElementById('start').addEventListener('click',start); 
 

 
    function start() { 
 
     function nextWord() { 
 
      if (counter < words.length) { 
 
       canvas.innerHTML = words[counter]; 
 
       counter++; 
 
      } else { 
 
       //return false;//<---Once you reach counter == words.length, 
 
           //you are one past last index of `words` 
 
           //array 
 
           
 
       clearInterval(show);//This is the time you should clear 
 
            //interval, so that clicking on button 
 
            //could set a new interval 
 
       counter = 0;  //Set this to 0 since you want to begin 
 
            //again from the 0 index of words array 
 
      } 
 
      
 
     } 
 

 
     var show = setInterval(nextWord, 1000); 
 
     /*You were never reaching this code below since maximum value of counter was equal to `words.length`, which in this case was 7 and counter was never more than 7. That's why this part is moved to else part above */ 
 
     //if (counter > words.length) { 
 
     // clearInterval(show); 
 
     //} 
 
    }
<div class="container"> 
 
     <h1>Are you ready?</h1> 
 
     <button id="start">start</button> 
 
     <h1 id="canvas"></h1> 
 
    </div>

+0

ありがとう、それはまた働いた。 – Roni

+0

@ロニィそれを知ってよかった!しかし、私が提供したコメントを参照することをお勧めします(既に行われていない場合)。これはさらにあなたを助けるでしょう! –

+0

私はそれが問題のどこにあるかを理解するのに役立ちます。 – Roni

関連する問題