2016-03-15 3 views
3

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

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

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

Here's a js fiddle

ответ

5

Вы забыли добавить 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>

0

Вы экономите неверное значение. Попробуйте это:

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

var funkyId = setInterval(funky, 2000); 

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

Я не думаю, что он хочет начать интервал, пока кнопка запуска не будет нажата – Rosenumber14

+0

@ Rosenumber14 - мой ум навыки чтения гораздо хуже моих навыков программирования. возможно, OP должен прочитать [ask] и задать более интересные вопросы. – Amit

+0

«Также, по-видимому, функция начинается с ее собственной ...» <- это было частью его вопроса, и, глядя на его код, вы можете сказать, что он хочет начать интервал, когда нажата кнопка с именем «start» и остановится интервал, когда нажата кнопка «Стоп». Кажется, это сценарий, который имеет наибольший смысл ... – Rosenumber14

3

Прежде всего, да, когда вы назначаете переменную функции, она сама вызывает.

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

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

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

    $('#stop').click(function() { 
     clearInterval(funky); 
    }); 
}); 
Смежные вопросы