Показать сообщение отдельно
  #1 (permalink)  
Старый 12.10.2014, 17:56
Аватар для giv13
Интересующийся
Отправить личное сообщение для giv13 Посмотреть профиль Найти все сообщения от giv13
 
Регистрация: 06.10.2014
Сообщений: 11

setInterval внутри плагина
Задаю вопрос в первый раз тут. Так что если что не так, не судите строго. Возникла проблема. Постараюсь объяснить более внятней на более простом примере. Есть такой код на странице:
<script type="text/javascript">
  function go() {
    $(".ex1").ex();
  };
</script>
<div class="ex1">tick1</div>
<input type="button" value="GO" onclick="go()" />

То есть по нажатию на кнопку GO для элемента ex1 вызывается плагин ex. Вот код плагина:
(function($) {
  $.fn.ex = function() {
    var text = this.text();
    interval = setInterval(function() {
      console.log(text);
    }, 1000)
    return this;
  };
})(jQuery);

То есть каждую секунду в консоль прописывается слово tick1. И все бы ничего, но если нажать на кнопку GO несколько раз, например, 3 раза, то в консоли видно, что слово tick1 начинает выводится 3 раза в секунду. То есть плагин ex с таймером вызывается заново, но старый таймер не удаляется.

Дальше я пришел к такому коду, который решил мою проблему (сколько бы раз я не нажимал кнопку GO, в консоль пишется слово tick1 раз в секунду):
(function($) {
  var interval;
  $.fn.ex = function() {
    var text = this.text();
    clearInterval(interval);
    interval = setInterval(function() {
      console.log(text);
    }, 1000)
    return this;
  };
})(jQuery);


Но теперь возникла новая необходимость, по нажатию кнопки GO вызывать плагин ex для нескольких элементов одновременно:
function go() {
  $(".ex1").ex();
  $(".ex2").ex();
};
<div class="ex1">tick1</div>
<div class="ex2">tick2</div>
<input type="button" value="GO" onclick="go()" />

И тут, так как стоит clearInterval, то он очищает вызов плагина для элемента ex1 и выводит в консоль только слово tick2. А если закомментировать clearInterval, то выводится оба слова - tick1 и tick2, но стоит нажать на кнопку GO несколько раз и возвращается первая проблема - старые таймеры не удаляются и слова tick1 и tick2 начинают выводится более чем 1 раз в секунду.

Надеюсь, объяснил доходчиво. Помогите, пожалуйста, в этой нелегкой для меня ситуации...
Ответить с цитированием