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

[Sugestão] AluraFone

É possível fazer o telefone com laços e repetições de tal maneira que poder-se-á usar o mouse ou teclado para digitar, como foi pedido. Usando JS tal qual aprendemos, o uso de event listeners é ótimo. Vejam aqui o código completo: https://github.com/PurpleKaz81/alura.git. Entre na pasta aluramidi e, na sequência, na desafio3. Busque o histórico de commits da main.js e clique no "Finished desafio3". Ali está uma maneira, junto ao HTML, de carregar a página dando foco ao input do telefone e subsequentemente permitindo-se o navegar com tab e shift+tab. Também achei no ChatGPT uma maneira de ir da tecla 1 de volta para o input usando preventDefault() de tal maneira que o shift+tab não me levasse da tecla um para minha barra de favoritos no Chrome.

Falando em ChatGPT, estudem com ele. É incrível. Após terminar o telefone, fiquei o refatorando. Descobri um sem-fim de novidades. Eis o código final em JS:

const buttonList = document.querySelectorAll('input[type=button]');
const telInput = document.querySelector('input[type=tel]');
telInput.tabIndex = -1;
telInput.focus();

const addEventListeners = (element, events) => {
    events.forEach(({event, action}) => {
        element.addEventListener(event, action);
    });
};

const buttonEvents = [
  {event: "mousedown", action: e => e.target.classList.add("ativa")},
  {event: "mouseup", action: e => e.target.classList.remove("ativa")},
  {event: "keydown", action: e => {
      if (e.key === " " || e.key === "Enter") e.target.classList.add("ativa")
  }},
  {event: "keyup", action: e => e.target.classList.remove("ativa")},
  {event: "click", action: e => telInput.value += e.target.value},
];

const telEvents = [
    {event: "keydown", action: e => {
        if (e.key === " " || e.key === "Enter") telInput.classList.add("ativa")
    }},
    {event: "keyup", action: e => telInput.classList.remove("ativa")},
];

buttonList.forEach((button, index) => {
    button.tabIndex = index + 1;
    addEventListeners(button, buttonEvents);
});

Eu entendi tudo que postei acima? Óbvio que não, boiei. Mas é um excelente ponto para se começar e faz mais sentido sintático. Dá para se ter uma ideia de arrow functions, forEach, o uso de arrays, events e actions e a possibilidade de fazer código mais legível e compreensível sem usar for loops.

Abs!

1 resposta
solução!

Oi Rafael, tudo bem?

Muito obrigada por compartilhar essa sua sugestão com a gente. Muito bom que você foi atrás de formas para fazer, o importante é praticar sempre.

Que aí o conteúdo começa a se fixar mais.

Parabéns pela atitude de vir compartilhar com todos aqui no fórum :D

Um abraço e bons estudos.