à l'appel de l'événement onChange après avoir appuyé sur la touche Enter
Je suis nouveau sur Bootstrap et bloqué avec ce problème. J'ai un champ de saisie et dès que je rentre juste d'un chiffre, la fonction de onChange
est appelé, mais je veux qu'elle soit appelée lorsque que j'appuie sur " Enter lorsque le nombre entier a été saisi. Le même problème pour la validation de la fonction qu'il appelle trop tôt.
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
});
Vous devez vous connecter pour publier un commentaire.
Selon Réagir Doc, vous pouvez écouter les événements de clavier, comme
onKeyPress
ouonKeyUp
, pasonChange
.Mise À Jour: Utilisation De Réagir.Composant
Voici le code à l'aide de Réagir.Composant qui fait la même chose
Ici est la jsfiddle.
onBlur
événement.<input ref='reference' onKeyPress={(e) => {(e.key === 'Enter' ? doSomething(this.refs.reference.value) : null)}} />
ref
.<input onKeyPress={e => doSomething(e.target.value)}
est suffisant.onKeyPress
est déclenchée. C'est un subtil perf d'amélioration.Vous pouvez utiliser onKeyPress directement sur le champ de saisie. onChange fonction des changements de l'état de la valeur sur chaque champ de saisie de changement et après avoir appuyé sur Enter, il va appeler une fonction recherche().
onKeyPress={this.yourFunc}
sinon la graisse flèche fonction sera de nouveau créé sur chaque rendu.appuyant sur Entrer lorsque le focus sur un contrôle de formulaire (input) normalement déclenche une
submit
(onSubmit) de l'événement sur le formulaire lui-même (pas d'entrée) de sorte que vous pouvez lier votrethis.handleInput
à la forme onSubmit.Sinon, vous pouvez le lier à la
blur
(onBlur) de l'événement sur lainput
qui se produit lorsque la mise au point est retiré (p. ex. surbrillance l'élément suivant que vous pouvez obtenir la mise au point)onKeyPress
.event.target.value
n'est pas disponiblehandleInput
méthode. Faire que par ma réponse vous couvrir à la fois lorsque l'utilisateur appuie sur entrée, tout concentrés sur l'entrée et lors de l'activation d'unsubmit
touche/entrée.Vous pouvez utiliser
event.key
Réagir utilisateurs, voici une réponse à l'exhaustivité.
Vous souhaitez mettre à jour pour chaque frappe de touche, ou d'obtenir la valeur uniquement à soumettre. L'ajout de la clé des événements pour le composant fonctionne, mais il existe des alternatives, comme recommandé dans les docs officielles.
Contrôlée vs non contrôlée des composants
Contrôlé
De la Docs - Formes et les composants commandés:
Si vous utilisez un composant contrôlé, vous devrez garder à l'etat mis à jour à chaque modification de la valeur. Pour ce faire, vous liez un gestionnaire d'événement pour le composant. Dans les docs' exemples, généralement de l'événement onChange.
Exemple:
1) Lier gestionnaire d'événement dans le constructeur (valeur conservée en l'état)
2) Créer une fonction de gestionnaire d'
3) Créer un formulaire de soumission de la fonction (la valeur est prise à partir de l'état)
4) Rendre
Si vous utilisez contrôlé composants, votre
handleChange
fonction sera toujours tiré, afin de mettre à jour et maintenir le bon état. L'état aura toujours de la valeur mise à jour, et lorsque le formulaire est soumis, la valeur sera prise à partir de l'état. Cela pourrait être un con si votre formulaire est très long, parce que vous aurez à créer une fonction pour chaque composant, ou d'écrire une simple qui gère tous les composants de changement de valeur.Incontrôlée
De la Docs - Incontrôlé composant
La principale différence ici est que vous n'utilisez pas le
onChange
fonction, mais plutôt laonSubmit
de la forme pour obtenir les valeurs, et de valider si nécessaire.Exemple:
1) Lier gestionnaire d'événement et de créer des ref à l'entrée dans le constructeur (pas de valeur conservés en l'état)
2) Créer un formulaire de soumission de la fonction (la valeur est prise à partir du DOM composant)
3) Rendre
Si vous utilisez incontrôlée composants, il n'est pas nécessaire de lier un
handleChange
fonction. Lorsque le formulaire est soumis, la valeur sera prise à partir du DOM et de la nécessaire validations peuvent arriver à ce point. Pas besoin d'en créer des fonctions de gestionnaire pour toute de l'entrée des composants ainsi.Votre question
Maintenant, pour votre question:
Si vous voulez atteindre cet objectif, l'utilisation incontrôlée de la composante. Ne pas créer le onChange gestionnaires s'il n'est pas nécessaire. Le
enter
clé de soumettre le formulaire et lehandleSubmit
fonction sera déclenché.Les changements que vous devez faire:
Supprimer le onChange appel dans votre élément
Poignée de la soumettre le formulaire et validez votre saisie. Vous avez besoin pour obtenir la valeur de votre élément dans le formulaire de soumission de la fonction, puis valider. Assurez-vous de créer la référence de votre élément dans le constructeur.
Exemple d'une utilisation incontrôlée de la composante:
Vous pouvez également écrire une petite fonction wrapper comme ce
Puis en consommer vos entrées