Je suis nouveau sur Bootstrap et coincé avec ce problème. J'ai un champ de saisie et dès que j'entre un seul chiffre, la fonction de onChange
est appelée, mais je veux qu'elle soit appelée lorsque j'appuie sur «Entrée» lorsque le numéro entier a été entré. Le même problème pour la fonction de validation - elle 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
});
javascript
twitter-bootstrap
reactjs
Bill Lumbert
la source
la source
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 une amélioration subtile de la perf.Vous pouvez utiliser onKeyPress directement sur le champ de saisie. La fonction onChange change la valeur d'état à chaque changement de champ de saisie et après avoir appuyé sur Entrée, elle appellera une recherche de fonction ().
la source
onKeyPress={this.yourFunc}
sinon la fonction de la grosse flèche sera recréée sur chaque rendu.onKeyPress={event => event.key === 'Enter' && this.search()}
appuyer sur Entrée lorsque le focus sur un contrôle de formulaire (entrée) déclenche normalement un
submit
événement (onSubmit) sur le formulaire lui-même (pas l'entrée) afin que vous puissiez lier votrethis.handleInput
formulaire au formulaire onSubmit.Alternativement, vous pouvez le lier à l'
blur
événement (onBlur)input
qui se produit lorsque le focus est supprimé (par exemple, tabulation vers l'élément suivant qui peut obtenir le focus)la source
onKeyPress
.event.target.value
n'est pas disponiblehandleInput
méthode du contrôleur . Faire selon ma réponse vous couvrirait à la fois lorsque l'utilisateur appuie sur Entrée tout en se concentrant sur l'entrée et lors de l'activation d'unsubmit
bouton / entrée.Vous pouvez utiliser
event.key
la source
Réagissez les utilisateurs, voici une réponse pour être complet.
Vous souhaitez soit mettre à jour pour chaque frappe ou obtenir la valeur uniquement lors de la soumission. L'ajout des événements clés au composant fonctionne, mais il existe des alternatives comme recommandé dans les documents officiels.
Composants contrôlés vs composants non contrôlés
Contrôlé
À partir des documents - Formulaires et composants contrôlés :
Si vous utilisez un composant contrôlé, vous devrez maintenir l'état à jour pour chaque modification de la valeur. Pour cela, vous liez un gestionnaire d'événements au composant. Dans les exemples des documents, généralement l'événement onChange.
Exemple:
1) Lier le gestionnaire d'événements dans le constructeur (valeur maintenue à l'état)
2) Créer une fonction de gestionnaire
3) Créer une fonction de soumission de formulaire (la valeur est tirée de l'état)
4) Rendre
Si vous utilisez des composants contrôlés , votre
handleChange
fonction sera toujours déclenchée, afin de mettre à jour et de conserver le bon état. L'État aura toujours la valeur mise à jour et lorsque le formulaire sera soumis, la valeur sera prélevée sur l'État. Cela peut être un problème si votre fiche est très longue, car vous devrez créer une fonction pour chaque composant, ou en écrire une simple qui gère la modification de valeur de chaque composant.Incontrôlé
À partir des documents - Composant non contrôlé
La principale différence ici est que vous n'utilisez pas la
onChange
fonction, mais plutôtonSubmit
le formulaire pour obtenir les valeurs et valider si nécessaire.Exemple:
1) Lier le gestionnaire d'événements et créer une référence à l'entrée dans le constructeur (aucune valeur conservée dans l'état)
2) Créer une fonction d'envoi de formulaire (la valeur est tirée du composant DOM)
3) Rendre
Si vous utilisez des composants non contrôlés , il n'est pas nécessaire de lier une
handleChange
fonction. Lorsque le formulaire est soumis, la valeur sera prise du DOM et les validations nécessaires peuvent avoir lieu à ce stade. Pas besoin de créer de fonctions de gestionnaire pour aucun des composants d'entrée également.Votre problème
Maintenant, pour votre problème:
Si vous souhaitez y parvenir, utilisez un composant non contrôlé. Ne créez pas les gestionnaires onChange si ce n'est pas nécessaire. La
enter
clé soumettra le formulaire et lahandleSubmit
fonction sera déclenchée.Changements que vous devez faire:
Supprimez l'appel onChange dans votre élément
Gérez le formulaire, soumettez et validez votre saisie. Vous devez obtenir la valeur de votre élément dans la fonction de soumission de formulaire, puis valider. Assurez-vous de créer la référence à votre élément dans le constructeur.
Exemple d'utilisation d'un composant non contrôlé:
la source
Vous pouvez également écrire une petite fonction wrapper comme celle-ci
Consommez-le ensuite sur vos entrées
la source