2011-05-20 11 views
0

ユーザーがid = "start"のボタンをクリックすることによってトリガーされるJSタイマーを作成しようとしています。ユーザーのクリックでsetInterval関数をトリガする方法は?

私はタイマー自体が正しく動作していますが、ボタンクリック(id = "start")でタイマーを開始するコードを追加しようとすると、私はそれを壊してしまい、理由がわかりません。

ご協力いただければ幸いです!

ここJSコードである:

$(document).ready(function(){ 

    var count = 0; 

     $('#start').click(function(){ 
      setInterval(function(){ 
       count++; 
       $('#timer').html(count + ' tacos seconds'); 
      },1000); 
     }); 

    }); 
+0

Ughhh。ちょうど私が最初に '$'を忘れたことを実感しました。今編集中。 –

+0

これは、クリックで新しいインターバルタイマーを開始します。正確には何が望ましい/間違っていますか?ただし、複数のタイマーをスタックすることはできません。 –

+0

インターバル機能が実行されていないか、まったく問題がありますか? – Brigham

答えて

1
$(document).ready(function() { 
    $('#start').click((function(container) { 
     var interval; 
     return function() { 
      if(interval) clearInterval(interval); 

      var count = 0; 

      interval = setInterval(function() { 
       count++; 
       $(container).html(count + ' tacos seconds'); 
      }, 1000); 
     }; 
    })("#timer")); 
}); 
+0

)これはどのように(指定されていない)問題に対処するのでしょうか?:-)(私は適切であれば 'count'の範囲を減らすことに反対していません。わかる)。 –

+0

複数のタイマーを防ぐために更新され、カウントの有効範囲が拡大されました。 –

+0

物事をもっと複雑にするために、人がコールバックや関数を使用しようとしておらず、非同期操作があまりにも混乱している場合は、新しい趣味/仕事を見つける必要があります。 –

0
$(document).ready(function() { 
    var count = 0; 
    var myInterval = null; 
    $('#start').click(function(){ 
     myInterval = setInterval(function(){ 
     count++; 
     $('#timer').html(count + ' tacos seconds'); 
     },1000); 
    }); 

は})。

クリックハンドラのスコープでsetIntervalを設定する場合は、レベルに宣言された間隔を保持する変数に変数を割り当てるようにしてください。これは、通常、常に私のために働いています。

0

あなたの目的があるexactilyわから、多分あなたはこのような何か試してみたいと思いますない:あなたは本当にナットを行くとresuable何かを持っているしたい場合はここで

var startInterveal; 
var timerStarted = false; 
var count =0; 
$(document).ready(function() { 
    $('#start').click(function() { 
     if (!timerStarted) { 
      timerStarted = true; 
      count =0; 
      $(this).attr('disabled', 'disabled'); 
      startInterveal = setInterval('tick();', 1000); 
     } 
    }); 
}); 

function tick() { 
    count++; 
    $('#timer').html(count + ' tacos seconds'); 
} 
0

は第二の答えです:

$(document).ready(function() { 
    $('#start').click(overboard("#timer")); 
    $('#start2').click(overboard("#timer2")); 
}); 

function overboard(container) { 
    var interval; 
    return function() { 
     if (interval) clearInterval(interval); 

     var count = 0; 

     interval = setInterval(function() { 
      count++; 
      $(container).html(count + ' tacos seconds'); 
     }, 1000); 
    }; 
} 
関連する問題