Javascript clearInterval с нажатием кнопки

У меня возникают проблемы с запуском clearInterval, когда я пытаюсь привязать его к нажатию кнопки. Кроме того, видимо, функция запускается сама по себе... Вот мой код

var funky = setInterval(function() {
    alert('hello world');
}, 2000);

$('#start').click(function() {
    funky();
});
$('#stop').click(function() {
    clearInterval(funky);
});

Вот скрипт js


person DjH    schedule 15.03.2016    source источник


Ответы (4)


Вы забыли добавить библиотеку jquery и сделали неправильное назначение, она должна быть внутри функции обратного вызова.

Рабочий пример:

var funky;

$('#start').click(function() {
  funky = setInterval(function() {
    alert('hello world');
  }, 2000);
});

$('#stop').click(function() {
    clearInterval(funky);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="start">start</button>
<button id="stop">stop</button>

person isvforall    schedule 15.03.2016

Во-первых, да, когда вы присваиваете переменной функцию, она вызывается сама.

Во-вторых, ваши события щелчка не работают, потому что вам нужно назначить интервал переменной при щелчке, а не вызывать функцию - нет никакой функции для вызова, как вы могли бы увидеть, если бы вы посмотрели на консоль разработчика.

Наконец, рекомендуется обернуть код jQuery в функцию готовности документа, чтобы обеспечить правильное связывание всех ваших обработчиков событий.

$(function () {
  var funky;
  $('#start').click(function() {
    funky = setInterval(function() {
      alert('hello world');
    }, 1000);
  });

  $('#stop').click(function() {
      clearInterval(funky);
  });
});
person mhodges    schedule 15.03.2016

Вы сохраняете неправильное значение. Попробуй это:

var funky = function() {
    alert('hello world');
}

var funkyId = setInterval(funky, 2000);

$('#start').click(function() {
    funky();
});
$('#stop').click(function() {
    clearInterval(funkyId);
});
person Amit    schedule 15.03.2016
comment
Я не думаю, что он хочет начать интервал, пока не будет нажата кнопка запуска - person Rosenumber14; 16.03.2016
comment
@ Rosenumber14 - мои навыки чтения мыслей намного уступают моим навыкам программирования. возможно, OP следует прочитать Как спросить и задать более правильные вопросы. - person Amit; 16.03.2016
comment
Кроме того, по-видимому, функция запускается сама по себе ... ‹ - это было частью его вопроса, и, глядя на его код, вы можете сказать, что он хочет запустить интервал при нажатии кнопки с именем start и остановить интервал, когда стоп щелкнул. Кажется, это сценарий, который имеет наибольший смысл... - person Rosenumber14; 16.03.2016

Здесь я даю вам идею.

  1. объявить переменную, например. let x;
  2. создайте функцию, которую вы хотите связать с setInterval. например function funky() { alert("Hello World"); }
  3. назначьте start.onclick функции, которая назначит setInterval функции x. например start.onclick = function(){ clearInterval(x); // to prevent multiple interval if you click more than one x = setInterval(funky, 2000); // assign the setInterval to x };
  4. назначьте stop.onclick на clearInterval(x), чтобы остановить интервал. например stop.onclick = function() { clearInterval(x); // to stop the interval };

Вот и все. Легко правильно.

person Jamil Ahmed    schedule 08.04.2020