Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Bug no intervalo

Olá,

O meu cronômetro está bloqueando o input antes mesmo de atingir 0, chegando em 1 ele já bloqueia o meu campo. Poderiam me ajudar?

Segue código:

var tempoRestante = $("#tempo-digitacao").text();
campo.one("focus", function(){ 
    var cronometroID = setInterval(function(){ 
        $("#tempo-digitacao").text(tempoRestante--);
        if(tempoRestante < 1){
            campo.attr("disabled", true); 
            clearInterval(cronometroID);
        }
    },1000);
});
1 resposta
solução!

Olá, Rog! Tudo certo? =)

Quando você coloca

$("#tempo-digitacao").text(tempoRestante--)

você está dizendo que o texto que aparecerá escrito no campo com ID tempo-digitacao será o valor da variável tempoRestante e, em seguida, ocorre a diminuição do valor dessa variável, para a verificação dentro do if.

Então perceba a ordem:

  1. Primeiro ocorre a atribuição do valor da variável ao campo.
  2. Em seguida, a variável é decrescida de uma unidade.
  3. Então, a verificação (if) entra em ação.

Dessa forma, quando o campo estiver com 1 segundo, a variável estará com uma unidade a menos (zero) e cairá dentro do if, bloqueando o campo.

O que você quer é que apareça o tempo zero na tela quando for bloquear, então a subtração deve ser realizada antes de atribuí-la ao campo, assim:

tempoRestante--;
$("#tempo-digitacao").text(tempoRestante);

Ou então:

$("#tempo-digitacao").text(--tempoRestante);

Que primeiro fará a diminuição do valor e, em seguida, atribuirá ao campo.

Agora foi? =)

Espero ter ajudado, mas qualquer dúvida, não deixe de postar por aqui! Abraços e bons estudos,

Fábio

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software