#javascript #timer #setinterval
#javascript #таймер #setinterval
Вопрос:
Я пытаюсь написать таймер JS, который будет запускаться нажатием пользователем кнопки с id = «start».
У меня сам таймер работает корректно, но когда я пытаюсь добавить код для запуска таймера при нажатии кнопки (id = «start») Я нарушаю это и не уверен, почему.
Любая помощь была бы высоко оценена!
Вот JS-код:
$(document).ready(function(){
var count = 0;
$('#start').click(function(){
setInterval(function(){
count ;
$('#timer').html(count ' tacos seconds');
},1000);
});
});
Комментарии:
1. Тьфу. Только что понял, что забыл ‘$’ в начале. Сейчас редактирую.
2. Это запустит новый таймер интервала при щелчке. Что именно желательно / неправильно? Однако, вероятно, что нескольким таймерам не следует разрешать складываться…
3. Проблема в том, что ваша интервальная функция не запущена или в чем именно проблема?
4. Как я могу удалить этот вопрос? Поскольку оказалось, что это не вопрос?
5. Действия @john k должны быть в разделе «теги». Выбирай … удалить 🙂
Ответ №1:
$(document).ready(function() {
$('#start').click((function(container) {
var interval;
return function() {
if(interval) clearInterval(interval);
var count = 0;
interval = setInterval(function() {
count ;
$(container).html(count ' tacos seconds');
}, 1000);
};
})("#timer"));
});
Комментарии:
1. Как это поможет решить (неуказанную) проблему? 🙂 (Не то чтобы я был против сокращения области
count
, если это уместно. В этом случае двойная привязка просто усложняет код для понимания).2. Обновлено, чтобы предотвратить использование нескольких таймеров и улучшить подсчет.
3. Что касается усложнения, если человек пытается использовать обратные вызовы, а функции anon и асинхронные операции слишком запутанны, ему нужно найти новое хобби / работу.
4. И еще одно обновление. Я действительно проверил это на будущее.
5. Спасибо! На самом деле я изначально пытался удалить этот вопрос, потому что понял, что только что пропустил «$», который нарушал все дело, но этот фрагмент, который вы отправили, помогает мне также исправить проблему с подсчетом. Ценю помощь.
Ответ №2:
$(document).ready(function() {
var count = 0;
var myInterval = null;
$('#start').click(function(){
myInterval = setInterval(function(){
count ;
$('#timer').html(count ' tacos seconds');
},1000);
});
});
При настройке вашего setInterval в области действия обработчика щелчков попробуйте присвоить его переменной, чтобы удерживать объявленный интервал на уровне выше. Обычно у меня это всегда срабатывало.
Ответ №3:
Не уверен точно, какова ваша цель, но, возможно, вы хотели бы попробовать что-то вроде этого:
var startInterveal;
var timerStarted = false;
var count =0;
$(document).ready(function () {
$('#start').click(function () {
if (!timerStarted) {
timerStarted = true;
count =0;
$(this).attr('disabled', 'disabled');
startInterveal = setInterval('tick();', 1000);
}
});
});
function tick() {
count ;
$('#timer').html(count ' tacos seconds');
}
Ответ №4:
Вот 2-й ответ, если вы действительно хотите сойти с ума и получить что-то возобновляемое:
$(document).ready(function() {
$('#start').click(overboard("#timer"));
$('#start2').click(overboard("#timer2"));
});
function overboard(container) {
var interval;
return function() {
if (interval) clearInterval(interval);
var count = 0;
interval = setInterval(function() {
count ;
$(container).html(count ' tacos seconds');
}, 1000);
};
}