Ich bin neu in Bootstrap und habe mich an dieses Problem gehalten. Ich habe ein Eingabefeld und sobald ich nur eine Ziffer eingebe, wird die Funktion von onChange
aufgerufen, aber ich möchte, dass sie aufgerufen wird, wenn ich die Eingabetaste drücke, wenn die ganze Zahl eingegeben wurde. Das gleiche Problem für die Validierungsfunktion - sie ruft zu früh auf.
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
quelle
quelle
onBlur
Ereignis binden .<input ref='reference' onKeyPress={(e) => {(e.key === 'Enter' ? doSomething(this.refs.reference.value) : null)}} />
ref
.<input onKeyPress={e => doSomething(e.target.value)}
ist ausreichend.onKeyPress
Auslösen eine neue Funktion erstellt wird. Es ist eine subtile Perf-Verbesserung.Sie können onKeyPress direkt im Eingabefeld verwenden. Die Funktion onChange ändert den Statuswert bei jeder Änderung des Eingabefelds und ruft nach Drücken der Eingabetaste eine Funktionssuche auf ().
quelle
onKeyPress={this.yourFunc}
sonst die Fettpfeilfunktion bei jedem Rendern neu erstellt wird.onKeyPress={event => event.key === 'Enter' && this.search()}
Drücken Sie die Eingabetaste, wenn der Fokus auf ein Formularsteuerelement (Eingabe) normalerweise ein
submit
(onSubmit) -Ereignis im Formular selbst (nicht in der Eingabe) auslöst, sodass Sie Ihr Ereignis anthis.handleInput
das Formular onSubmit binden können .Alternativ können Sie es an das
blur
Ereignis (onBlur) binden, das auftrittinput
, wenn der Fokus entfernt wird (z. B. das nächste Element, das den Fokus erhalten kann).quelle
onKeyPress
.event.target.value
ist nicht verfügbarhandleInput
Methode. Wenn Sie gemäß meiner Antwort vorgehen, werden Sie sowohl beim Drücken der Eingabetaste als auch beim Aktivieren einersubmit
Taste / Eingabe erfasst.Sie können verwenden
event.key
quelle
Reagiere auf Benutzer, hier ist eine Antwort der Vollständigkeit halber.
Sie möchten entweder für jeden Tastendruck aktualisieren oder den Wert nur beim Senden abrufen. Das Hinzufügen der Schlüsselereignisse zur Komponente funktioniert, es gibt jedoch Alternativen, wie in den offiziellen Dokumenten empfohlen.
Kontrollierte vs unkontrollierte Komponenten
Kontrolliert
Aus den Dokumenten - Formulare und kontrollierte Komponenten :
Wenn Sie eine gesteuerte Komponente verwenden, müssen Sie den Status für jede Änderung des Werts auf dem neuesten Stand halten. Dazu binden Sie einen Ereignishandler an die Komponente. In den Beispielen der Dokumente normalerweise das Ereignis onChange.
Beispiel:
1) Binden Sie den Ereignishandler im Konstruktor (Wert im Status beibehalten).
2) Handlerfunktion erstellen
3) Formularübermittlungsfunktion erstellen (Wert wird aus dem Status übernommen)
4) Rendern
Wenn Sie gesteuerte Komponenten verwenden, wird Ihre
handleChange
Funktion immer ausgelöst, um den ordnungsgemäßen Status zu aktualisieren und beizubehalten. Der Status hat immer den aktualisierten Wert, und wenn das Formular gesendet wird, wird der Wert dem Status entnommen. Dies kann ein Nachteil sein, wenn Ihr Formular sehr lang ist, da Sie für jede Komponente eine Funktion erstellen oder eine einfache Funktion schreiben müssen, die die Wertänderung jeder Komponente behandelt.Unkontrolliert
Aus der Komponente Docs - Uncontrolled
Der Hauptunterschied besteht darin, dass Sie nicht die
onChange
Funktion, sondernonSubmit
das Formular verwenden, um die Werte abzurufen und bei Bedarf zu überprüfen.Beispiel:
1) Binden Sie den Ereignishandler und erstellen Sie eine Referenz für die Eingabe im Konstruktor (kein Wert wird beibehalten)
2) Formularübermittlungsfunktion erstellen (Wert wird aus der DOM-Komponente übernommen)
3) Rendern
Wenn Sie unkontrollierte Komponenten verwenden, müssen Sie keine
handleChange
Funktion binden . Wenn das Formular gesendet wird, wird der Wert aus dem DOM übernommen und die erforderlichen Validierungen können an dieser Stelle erfolgen. Es müssen auch keine Handlerfunktionen für eine der Eingabekomponenten erstellt werden.Ihr Problem
Nun zu Ihrem Problem:
Wenn Sie dies erreichen möchten, verwenden Sie eine unkontrollierte Komponente. Erstellen Sie keine onChange-Handler, wenn dies nicht erforderlich ist. Der
enter
Schlüssel sendet das Formular und diehandleSubmit
Funktion wird ausgelöst.Änderungen, die Sie vornehmen müssen:
Entfernen Sie den onChange-Aufruf in Ihrem Element
Behandeln Sie das Formular senden und validieren Sie Ihre Eingabe. Sie müssen den Wert von Ihrem Element in der Formularübermittlungsfunktion abrufen und dann validieren. Stellen Sie sicher, dass Sie den Verweis auf Ihr Element im Konstruktor erstellen.
Beispiel für die Verwendung einer unkontrollierten Komponente:
quelle
Sie können auch eine kleine Wrapper-Funktion wie diese schreiben
Dann verbrauchen Sie es auf Ihren Eingaben
quelle