«Действует странно» потому, что вы запускаете секунду , отдельный таймер, так что теперь оба работают, каждый помещая свою собственную копию a
в элемент.Вам необходимо запомнить дескриптор предыдущего таймера (возвращаемое значение setInterval
) и отменить его (через clearInterval
):
let handle = 0;
$(".c1").click(function(e) {
let a = 0;
clearInterval(handle)
handle = setInterval(function() {
$("#timer").text(a);
a++;
}, 500);
})
.card {
font-size: 25px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<div class="btn c1"> Start Timer</div>
<br>
<br>
<span id="timer" class="card">0</span>
Примечание. Я использовал значение 0
в качестве начального значения handle
, а затем с радостью назвал clearInterval
таймер уже работал или нет.0
является недопустимым значением дескриптора, а clearInterval
(и clearTimeout
) игнорируют недопустимые значения дескриптора, поэтому вы можете сделать это безопасно.Но добавьте if
, если хотите.