私は jQuery にまったく慣れていないので、それほど複雑ではないと思われることをしたいと思います。ユーザーがフォームへの入力を開始したときに 60 秒のタイマーを開始したいと考えています。タイマーが 0 になると、他の機能がトリガーされます。
私がこれまでに持っているもの:
$('form').click(function(){
$(function(){
var count = 60;
countdown = setInterval(function(){
$("p#timer").html(count);
if (count == 0) {
$("p#sentence").html("Time's up! You lost.");
$("form").addClass('lost');
clearInterval(countdown);
}
count--;
}, 1000);
});
});
このコードは機能し、私がやりたいことを正確に実行します。唯一の問題は、ユーザーがフォームの別の部分 (別の入力など) をクリックすると、最初のタイマーと同期されていない 2 番目のタイマーが開始され、上書きされることです。基本的に、ユーザーがフォームをクリックするたびに、別のタイマーが開始され、状況が悪化します。
これを見ると、このほんの少しのコードでそれができるのはかなり理にかなっているように思えます。とはいえ、それを防ぐために何をすればいいのかわからない。
フォームにクラスを与え、ユーザーがクリックした後にそれを削除しようとしました:
$('form.timer_idle').click(function(){
$(this).removeClass('timer_idle');
$(function(){
var count = 60;
countdown = setInterval(function(){
$("p#timer").html(count);
if (count == 0) {
$("p#sentence").html("Time's up! You lost.");
$("form").addClass('lost');
clearInterval(countdown);
}
count--;
}, 1000);
});
});
うまくいくことを願ったが、うまくいかなかった。クラス .timer_idle は、最初のクリック後に実際に削除されましたが、その後のスクリプトの実行を停止しませんでした。