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

210
Vistas
El clic del elemento no se activa cuando el elemento se oculta

Tengo un evento de desenfoque en una entrada de texto que activa un botón (lo representa con React). Cuando hace clic en el botón, el evento de desenfoque se activa en la entrada de texto que elimina el botón del DOM, pero el evento de clic del botón no se activa. Intenté envolver el código que elimina el botón del DOM en un tiempo de espera de 100 ms y funciona pero se siente extraño, ¿hay una mejor manera?

Aquí está la esencia del código:

 const blurHandler = e => { setShowInput(false); //this prevents buttonHandler from being fired // setTimeout(() => setShowInput(false), 100); // this works with 100ms, but not with 50ms for example } const buttonHandler = e => { console.log('Button clicked!'); } const focusHandler = e => { setShowInput(true); } return ( <div> <input type="text" onFocus={focusHandler} onBlur={blurHandler} > {showInput && <button onClick={buttonHandler}>Apply to all</button>} </div> )
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Esto es fácil, solo necesita usar un disparador de evento diferente. onClick es demasiado tarde, no se activará hasta que ocurra el desenfoque del área de texto, pero onMouseDown se activará antes:

 const btn = document.getElementById('btn'); const txt = document.getElementById('txt'); txt.onblur = () => {console.log("Textarea blur fired")} txt.onfocus = () => {console.log("Textarea focus fired")} btn.onclick = () => {console.log("Button onClick fired")} btn.onmousedown = () => {console.log("Button mouseDown fired")} btn.onmouseup = () => {console.log("Button mouseUp fired")}
 <textarea id="txt">Focus me first</textarea> <button id="btn">Click me next</button>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Dado que renderizas condicionalmente el botón con:

 {showInput && <button onClick={buttonHandler}>Apply to all</button>}

Tan pronto como establezca showInput en un valor falso, se eliminará del DOM. Tienes un par de opciones:

Opción 1 (si no tienes que quitar el botón del DOM)

 return ( <div> <input type="text" onFocus={focusHandler} onBlur={blurHandler} > <button style={{opacity: showInput ? 1 : 0}} onClick={buttonHandler}>Apply to all</button>} </div> )

Establecer la opacidad en 0 ocultará el botón, pero no lo eliminará del dom.

Opción 2 (Si tienes que quitar el botón del DOM)

 const btnClickedRef = useRef(false) const buttonHandler = e => { console.log('Button clicked!'); btnClickedRef.current = true } return ( <div> <input type="text" onFocus={focusHandler} onBlur={blurHandler} > {showInput && btnClickedRef.current && <button onClick={buttonHandler}>Apply to all</button>} </div> )
about 4 years ago · Juan Pablo Isaza Denunciar
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