1

java script を使用して div を更新しようとしています。setInterval() と clearInterval ()、正常に動作していますが、停止ボタンをクリックしたときに単一の div の Refresh プロセスを停止したい ..clear Interval がここで機能しない

<script type ="text/javascript">
        $(document).ready(function () {
            $('.output').click(function () {
                var id = $(this).closest('.g').attr('id');

                Go(id);

            })
            $('.bt').click(function () {
           var id = $(this).closest('.g').attr('id');
                stop(id)
            });

            function Go(id) {
                id = setInterval(function () {
                    Chat_msg('Ch04', id, u)
                }, 3000);
            };
            function stop(id) {

                clearInterval(id);

            }

        })

    </script>
</head>

<body>
<div id="a" class='g'>
    <div class="output"></div>
    <input id="Button1" type="button" value="stop" class="bt" />
</div>

<div id="b">
    <div class="output"></div>
    <input id="Button2" type="button" value="stop"  class="bt"/>
</div>

<div id="c">
     <div class="output"></div>
    <input id="Button3" type="button" value="stop" class="bt" />
</div>


</body>
</html>
4

4 に答える 4

1

間隔にグローバル変数を使用します。

var interv = null;

interv = setInterval(function { ... }, 5000);

$('#btn').on('click', function(){
    if (interv) clearInterval(intev);
})
于 2012-05-25T16:03:55.903 に答える
0

関連付けた参照がsetInterval停止ボタン ハンドラーの範囲内にない可能性があります。

$("#start").on("click", function(){
  var interv = setInterval(function(){ /*...*/ }, 1000);
});

$("#stop").on("click", function(){
  clearInterval(interv);
});

上記のコードでは、interv変数は #stop ボタン ハンドラーのスコープ内にありません。これを別のレベルに移動することで変更できます。

var interv;

$("#start").on("click", function(){
  interv = setInterval(function(){ /*...*/ }, 1000);
});

$("#stop").on("click", function(){
  clearInterval(interv);
});

これで、両方のハンドラーがinterv変数にアクセスできるようになりました。

于 2012-05-25T16:04:16.997 に答える
0

idスコーピングの問題と、 DOM 属性をsetInterval応答値と交換可能に使用することの組み合わせのように見えます。

<script type ="text/javascript">
    $(document).ready(function () {
        var timeouts = {};

        $('.output').click(function () {
            var id = $(this).closest('.g').attr('id');
            go(id);
        });

        $('.bt').click(function () {
            var id = $(this).closest('.g').attr('id');
            stop(id);
        });

        function go(id) {
            timeouts[id] = setInterval(function () {
                Chat_msg('Ch04', id, u)
            }, 3000);
        }

        function stop(id) {
            clearInterval(timeouts[id]);
        }
    });
</script>
于 2012-05-25T19:04:33.193 に答える
0

私が過去に行った方法は、設定されたタイムアウトを使用して自分自身を呼び出す関数を使用することでした。

var stop = false
function caller  () {
  if (stop === true){
    //do something
    setTimeout(caller() , 1000);
  }
  else{
    //do something after button has  been click and stop is set to true
  }
}
于 2012-05-25T16:12:12.700 に答える