Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

123
Visualizações
Deshabilitar la acción predeterminada en keyUp

En mi formulario, quiero usar las teclas de flecha del teclado para moverme entre los campos de entrada.

Aquí está el ejemplo de Codesandbox. (Haga clic dentro del último campo de entrada y use la tecla de flecha ARRIBA para subir al campo de entrada del hermano anterior.

Código:

 const arrowDownPosition = React.useRef(); const getCurElePosition = (eTarget) => { const mum = eTarget.parentElement.parentElement; const parent = mum.parentElement; const children = Array.from(parent.children); let taskNum; children.forEach((el, i) => { const elChild = el.children[0].children[0]; if (elChild === eTarget) { taskNum = i; } }); return [taskNum, parent, children, mum]; }; const keyUpHandler = (e) => { e.preventDefault(); if (e.key === "ArrowUp") { e.target.setSelectionRange( arrowDownPosition.current[0], arrowDownPosition.current[1] ); } }; const keyHandler = (e) => { e.stopPropagation(); const eTarget = e.target; const [elePosition, parent, children, mum] = getCurElePosition(eTarget); if (e.key === "ArrowUp") { let previousSiblingRef; children.forEach((ele, i) => { if (ele == mum && i - 1 >= 0) { previousSiblingRef = i - 1; } }); if (previousSiblingRef) { const { selectionStart, selectionEnd } = eTarget; arrowDownPosition.current = [selectionStart, selectionEnd]; const previousSibling = children[previousSiblingRef].children[0].children[0]; previousSibling.focus(); previousSibling.setSelectionRange(selectionStart, selectionEnd); } } };

La solución anterior es una manera hacky de resolver el problema. Puede ver que el símbolo de intercalación se mueve al inicio del campo de entrada anterior antes de que se mueva a la posición deseada. Estoy usando useRef para almacenar el valor.

¿Esto se debe a que no puedo detener el controlador predeterminado keyUp antes de que se ejecute mi código?

Gracias

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda