3
respostas

.one vs .on

Olá, Conforme as aulas, o seguinte código necessita do .one:

var timerElement = $("#timer");
var timerText = timerElement.text();
$(".campo-digitacao").one("focus", function() {
    var intervalID = setInterval(function() {
        if (timerText > 0) {
            timerElement.text(--timerText);
        }
        if (timerText <= 0) {
            clearInterval(intervalID);
            $(".campo-digitacao").attr("disabled", true);
        }
    }, 1000);

});

Porém, o seguinte código não:

$(".campo-digitacao").on("focus", function() {
    var timerElement = $("#timer");
    var timerText = timerElement.text();

    var intervalID = setInterval(function() {
        if (timerText > 0) {
            timerElement.text(--timerText);
        }
        if (timerText <= 0) {
            clearInterval(intervalID);
            $(".campo-digitacao").attr("disabled", true);
        }
    }, 1000);
});

Alguém sabe dizer o porquê?

Obrigado

3 respostas

Fala ai Italo, beleza?

A diferença entre ambos á basicamente na quantidade de execução, a primeira one é executada apenas uma vez, porém, a on é executada toda vez que o elemento receber o focus.

Espero ter ajudado.

Olá Matheus,

Sim, isso eu já havia entendido. O que eu nao entendi é porque a minha versao com .on nao dá problema. Ela é executada sim, várias vezes, porém o problema apresentado com o .on nao acontece comigo.

A unica diferenca é que em um as variáveis ficam em um escopo e no outro fica em outro escopo. Ou seja, eu teria conseguido resolver o problema sem utilizar o .one, apenas movendo variáveis de lugar.

Como faz tempo que fiz o curso, não lembro desse problema apresentado com o .on, poderia me explicar?