0

わかりましたので、要素のIDを変更し、2つの異なる関数を異なるIDに適用することにより、setInterval関数を開始/停止しようとしています。現時点でのコードは次のとおりです。

$(document).ready(function(){
  var seq
  $('#start').click(function(){
     $(this).attr('id','stop');
     seq=self.setInterval(function(){blah()},125);
  });
  $('#stop').click(function(){
     $(this).attr('id','start');
     clearInterval(seq);
  });
});

#start 要素をクリックすると、setInterval が開始され、ID が #stop に変更されますが、もう一度クリックすると (#stop と呼ばれる要素で)、#start のコードが実行されます (別の setInterval が追加されます) ありがとう

関数「何とか」は、構成された関数の単なる例です

4

3 に答える 3

5

あなたが言う時:

$('some selector').click(...

some selector これにより、その時点で一致するすべての要素にクリック ハンドラーがバインドされます。将来一致する可能性のある要素には自動的に適用されません。

クリック イベント時にセレクターに一致する要素にハンドラーを適用するには、委任されたイベント ハンドラーを使用する必要があります。つまり、ハンドラーを親要素 (またはdocument、要素に静的な親がない場合)にアタッチします。

$(document).ready(function(){
    var seq
    $(document).on('click', '#start', function(){
        $(this).attr('id','stop');
        seq=self.setInterval(function(){blah()},125);
    });
    $(document).on('click', '#stop', function(){
        $(this).attr('id','start');
        clearInterval(seq);
    });
});

この.on()メソッドを使用すると、渡すパラメーターに応じて、「通常の」委任されていないハンドラーまたは委任されたハンドラーをアタッチできます。

もう 1 つのオプションは、ID を変更せ、何らかの方法で現在の状態をテストする単一のクリック ハンドラーを使用することです。

$(document).ready(function(){
  var seq;
  $('#start').click(function(){
     if (seq) {
        clearInterval(seq);
        seq = null;
     } else
        seq=self.setInterval(function(){blah()},125);
  });
});
于 2013-05-17T22:22:16.273 に答える