1

我正在尝试使用 java 脚本刷新 div。setInterval()和clearInterval(),它工作正常,但是当我点击停止按钮时我想停止单个div的刷新过程..clear Interval not working here

<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

我过去解决这个问题的方法是使用一个使用设置超时来调用自身的函数。

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 回答
0

看起来像是范围问题的组合,并且可以互换使用idDOM 属性和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

您关联的引用可能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 回答