2012-05-25 3 views
1

Я пытаюсь обновить div с помощью java-скрипта. setInterval() и clearInterval(), его работает отлично, но я хочу остановить процесс Refresh для одного DIV, когда я нажал кнопку остановки ..clear Interval не работает HererclearInterval() не работает после нажатия кнопки остановки

<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> 
+9

Оставьте свой код. – WojtekT

+0

Моя догадка - переменная, возвращаемая 'setInterval', выходит за пределы области действия в обработчике кнопки' stop'. –

ответ

1

использовать глобальную переменную для интервала.

var interv = null; 

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

$('#btn').on('click', function(){ 
    if (interv) clearInterval(intev); 
}) 
+0

Это не обязательно быть глобальным. Он просто должен быть доступен для обеих областей. –

+0

+1 Да, я определенно думаю, что это проблема с прочтением кода ... –

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.

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 
    } 
} 
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> 
Смежные вопросы