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

146
Vistas
la función onClick se activa cuando no hago clic en el botón en forma de reacción

Creé un formulario y dentro quiero 2 formas de enviar:

  • uno llenando el campo de entrada y presionando enter
  • uno grabando voz (yo uso la biblioteca react-speech-recognition)

Como agregué la segunda forma, el campo de entrada no funciona. Puedo escribir algo y presionar enter pero necesariamente llamará a la función enlazar al botón onClick of record-voice, ¿por qué?

Aquí está el código del componente principal.

 <form onSubmit={ handleSubmit } style={Style.myform}> <Dictaphone values={values} write_speech={this.write_speech} perso={this.state.perso} question={this.state.question} /> <div className={Style.mydiv}> <input className={Style.n_0} id="question" type="text" onChange={handleChange} value={values.question} disabled={isSubmitting} placeholder="Type here"/> </div> </form>

Entonces, aquí puede ver el primer método en la entrada y el segundo en el componente Dictáfono, llama a la siguiente función:

 write_speech = (text, values) => { console.log("write_speech"); console.log(values) this.setState({question: document.getElementById("montexte").getAttribute("montexte")}, function () { values['question'] = this.state.question }); }

Y el contenido de Dicatphone:

 return ( <div> <button onClick={SpeechRecognition.startListening} type="button"> Start</button> <button onClick={(transcript) => props.write_speech(transcript, props.values)}>Stop</button> <button onClick={() => alert("toto")}>Reset</button> <p id="montexte" type="text" className={Style.welcome_text} hidden={true} montexte={transcript} /> </div> );

Así que puedo hacer clic en Iniciar para grabar y Detener para llamar a write_speech, pero cuando solo uso el componente principal y completo la entrada, necesariamente también llama a write_speech. Pero no quiero eso.

Hice una prueba simple y curiosamente no llama a la function () => alert("toto")

Lo que ya probé: los 3 métodos descritos en esta publicación, pero me persistió el mismo problema https://stackoverflow.com/a/34226188/10971146

gracias por haber leído

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Solución

Los botones de parada y reinicio deben tener type="button" o, de lo contrario, el primero de los dos se comportará como un botón de envío. Si necesita un botón de envío de formulario, use un botón de envío explícito de type="submit" .

porque pasa esto

De forma predeterminada , el tipo para el elemento de botón HTML es submit . Cuando escribe texto en una entrada de formulario y presiona Entrar, eso actúa como un evento de envío. Por lo tanto, el formulario llama al controlador de clics para el primer botón que ve.

Aquí hay un JSFiddle que muestra lo que sucede si tiene un formulario con un botón de envío explícito colocado después de un botón sin un atributo de type explícito: se llama al controlador de clic del botón: https://jsfiddle.net/r128cfyn/7/ . Aunque el botón de envío del formulario es explícito, el primer botón también es un botón de envío porque no es type="button" .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Intenta usar

onclick="event.preventDefault()";

para evitar el comportamiento predeterminado de los botones.

Más información aquí

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