Zahl mit dezimaler ein-in Reagieren?
Ich habe eine Reihe von input innerhalb Reagieren Komponente, und es muss akzeptieren, dass die Zahl mit einem Dezimalpunkt. In der Regel Einträge in der Bruchteile eines cents, wie 0.0073
, dass Art der Sache.
<div className="form-group">
<label htmlFor="rate" className="col-sm-6 control-label">Rate:</label>
<div className="col-sm-2">
<input type="number"
title="Rate"
id="rate"
className="form-control"
value={this.props.rate}
min="0.00"
step="0.001"
max="1.00"
onChange={()=>{
console.log('page rate changed');
this.props.setrate($('#rate').val());
}} />
</div>
</div>
Das Problem ist, dass mit jeden Tastendruck, es ist das zurücksetzen der Preis für die app, und dann setzen diesen Wert in die input
. Also es geht so:
- Benutzer-Typen
0
, der Wert auf0
, und0
angezeigt. - Benutzer-Typen
.
,0.
ist keine gültige Zahl, so wird die Eingabe gelöscht.
Kann jeder denken, oder einen workaround? Ich weiß, ich könnte einfach ein normaler Eingang, aber type="number"
führt zu einige nette Sachen in verschiedenen Browsern.
- Können Sie nach einem plunker oder Geige?
- Hier ein fiddle: jsfiddle.net/972umnnq
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe versucht den code und war nicht wirklich betroffen von Ihrem Problem, der Wert ist in der Tat leer, wenn Sie geben Sie den letzten Punkt, die Eingabe wird aber nicht zurückgesetzt.
Dem was ich verändert von Ihrer Umsetzung ist, dass ich den input-Wert aus der
onChange
Veranstaltung eher als jQuery verwenden.Aber ich bezweifle, dass dein Problem kommt aus, dass, obwohl.
Was Sie tun können, ist nicht zu nennen, Ihre
setrate
Funktion, wenn Sie erkennen, dass eine Ende Punkt in Ihrem string. Ihr Zustand wird nicht geändert werden, bis der Benutzer eine gültige Zahl, so dass ein Tastendruck nach der0.
.value
stattdefaultValue
. Vielen Dank für zeigt mir, wie man dies tun kann, ohne jQuery, aber - es ist eine Art Krücke, die ich versuche, um loszuwerden, mit Reagieren.Können Sie so etwas tun
Form.- Eingang können Sie jede Komponente, die einen Wert hat.
Werden Sie haben, um Sie später zu überprüfen ", das ist unvermeidlich.
geben sollte text-und Eingabe-Wert definiert werden sollte, von regex.
regex bedeutet hier: mit einer Zahl beginnen, und fügen Sie so viele wie Sie möchten. dann Optional Ende Dezimalzahlen mit bis zu 4 Dezimalstellen.
Hatte ich ein ähnliches Problem hatte wo ich dezimal zahlen in eine Datenbank und Lesen Sie in Reagieren. Standardmäßig wird die Dezimalzahl, die zeigen würde, mit nachgestellten Nullen, wenn die Anzeige Reagieren. Versucht, die Anzeige ohne das nachgestellte Nullen hat mir das Problem, das Sie oben beschreiben. Mein Problem ist möglicherweise etwas anders aus, was du suchst, aber ich denke, dass es anderen helfen würde. Was ich zu tun hatte:
select mynumber from mytable
ich habeselect (TRIM(mynumber)+0) as mynumber from mytable
. Dies entfernt automatisch die nachgestellte Nullen.value
von der input-Felder.Dann, anstatt zu verhindern, dass Benutzer die Eingabe einer nicht-Zahl-Wert ich ändern Sie einfach die Hintergrundfarbe des Eingabefeldes auf rot auf, wenn der Wert keine Zahl ist.
if (isNaN(mynumber)) {
bgcolor = "#fdd" //Fügen Sie diese auf Ihre Eingabe Stil
}