Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
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 la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda