Soy nuevo en Bootstrap y me quedé con este problema. Tengo un campo de entrada y tan pronto como ingreso solo un dígito, onChange
se llama a la función from , pero quiero que se llame cuando presiono 'Enter cuando se ha ingresado el número completo. El mismo problema para la función de validación: llama demasiado pronto.
var inputProcent = React.CreateElement(bootstrap.Input, {type: "text",
//bsStyle: this.validationInputFactor(),
placeholder: this.initialFactor,
className: "input-block-level",
onChange: this.handleInput,
block: true,
addonBefore: '%',
ref:'input',
hasFeedback: true
});
javascript
twitter-bootstrap
reactjs
Bill Lumbert
fuente
fuente
onBlur
evento.<input ref='reference' onKeyPress={(e) => {(e.key === 'Enter' ? doSomething(this.refs.reference.value) : null)}} />
ref
.<input onKeyPress={e => doSomething(e.target.value)}
es suficiente.onKeyPress
se activa. Es una mejora sutil de rendimiento.Puede usar onKeyPress directamente en el campo de entrada. La función onChange cambia el valor de estado en cada cambio de campo de entrada y después de presionar Enter se llamará a una función de búsqueda ().
fuente
onKeyPress={this.yourFunc}
contrario, la función de flecha gruesa se volverá a crear en cada representación.onKeyPress={event => event.key === 'Enter' && this.search()}
Al presionar Intro cuando el foco en un control de formulario (entrada) normalmente activa un
submit
evento (onSubmit) en el formulario en sí (no en la entrada) para que pueda vincular suthis.handleInput
al formulario onSubmit.Alternativamente, puede vincularlo al
blur
evento (onBlur) en elinput
que sucede cuando se elimina el foco (por ejemplo, tabular al siguiente elemento que puede enfocarse)fuente
onKeyPress
.event.target.value
no está disponiblehandleInput
método del controlador . Hacer según mi respuesta los cubriría a ambos cuando el usuario presiona enter mientras se enfoca en la entrada y cuando activa unsubmit
botón / entrada.Puedes usar
event.key
fuente
Reaccionar usuarios, aquí hay una respuesta para completar.
Desea actualizar para cada pulsación de tecla u obtener el valor solo al enviar. Agregar los eventos clave al componente funciona, pero hay alternativas como se recomienda en los documentos oficiales.
Componentes controlados vs no controlados
Revisado
De los Documentos - Formularios y componentes controlados :
Si utiliza un componente controlado, deberá mantener actualizado el estado para cada cambio en el valor. Para que esto suceda, debe vincular un controlador de eventos al componente. En los ejemplos de los documentos, generalmente el evento onChange.
Ejemplo:
1) Enlazar controlador de eventos en el constructor (valor mantenido en estado)
2) Crear función de controlador
3) Crear función de envío de formulario (el valor se toma del estado)
4) Renderizar
Si usa componentes controlados , su
handleChange
función siempre se activará para actualizar y mantener el estado correcto. El estado siempre tendrá el valor actualizado, y cuando se envíe el formulario, el valor se tomará del estado. Esto podría ser una estafa si su formulario es muy largo, porque tendrá que crear una función para cada componente, o escribir una simple que maneje el cambio de valor de cada componente.Sin control
De los documentos: componente no controlado
La principal diferencia aquí es que no utiliza la
onChange
función, sino más bienonSubmit
el formulario para obtener los valores y validar si es necesario.Ejemplo:
1) Enlazar controlador de eventos y crear referencia a entrada en constructor (no se mantiene ningún valor en estado)
2) Crear función de envío de formulario (el valor se toma del componente DOM)
3) Renderizar
Si utiliza componentes no controlados , no es necesario vincular una
handleChange
función. Cuando se envía el formulario, el valor se tomará del DOM y las validaciones necesarias pueden ocurrir en este punto. No es necesario crear funciones de controlador para ninguno de los componentes de entrada también.Tu problema
Ahora, para su problema:
Si desea lograr esto, use un componente no controlado. No cree los controladores onChange si no es necesario. La
enter
clave enviará el formulario y sehandleSubmit
activará la función.Cambios que debes hacer:
Elimine la llamada onChange en su elemento
Maneje el envío del formulario y valide su entrada. Debe obtener el valor de su elemento en la función de envío del formulario y luego validarlo. Asegúrese de crear la referencia a su elemento en el constructor.
Ejemplo de uso de un componente no controlado:
fuente
También puedes escribir una pequeña función de envoltura como esta
Luego consúmelo en tus entradas
fuente