Ich habe gesehen, dass einige Browser die input type="number"
Notation von Zahlen lokalisieren .
In Feldern, in denen meine Anwendung Längen- und Breitengradkoordinaten anzeigt, erhalte ich also Informationen wie "51.983", in denen es "51.982559" sein sollte. Meine Problemumgehung besteht darin, input type="text"
stattdessen zu verwenden , aber ich möchte die Zahleneingabe mit der korrekten Anzeige von Dezimalstellen verwenden.
Gibt es eine Möglichkeit, Browser zu zwingen, einen Dezimalpunkt in der Zahleneingabe zu verwenden, unabhängig von den clientseitigen lokalen Einstellungen?
(Es versteht sich von selbst, dass ich dies in meiner Anwendung ohnehin auf der Serverseite korrigiere, aber in meinem Setup muss es auch auf der Clientseite korrekt sein (aufgrund von JavaScript)).
Danke im Voraus.
UPDATE
Ab sofort akzeptiert die Eingabe von Zahlen in Chrome Version 28.0.1500.71 m unter Windows 7 keine mit Komma formatierten Dezimalstellen mehr. Vorgeschlagene Vorschläge mit demstep
Attribut scheinen nicht zu funktionieren.
Antworten:
Derzeit berücksichtigt Firefox die Sprache des HTML-Elements, in dem sich die Eingabe befindet. Versuchen Sie zum Beispiel diese Geige in Firefox:
http://jsfiddle.net/ashraf_sabry_m/yzzhop75/1/
Sie werden sehen, dass die Ziffern auf Arabisch sind und das Komma als Dezimaltrennzeichen verwendet wird, was bei Arabisch der Fall ist. Dies liegt daran, dass dem
BODY
Tag das Attribut zugewiesen wirdlang="ar-EG"
.Versuchen Sie als nächstes dieses:
http://jsfiddle.net/ashraf_sabry_m/yzzhop75/2/
Dieser wird mit einem Punkt als Dezimaltrennzeichen angezeigt, da die Eingabe in ein
DIV
bestimmtes Attribut eingeschlossen istlang="en-US"
.Eine Lösung, auf die Sie zurückgreifen können, besteht darin, Ihre numerischen Eingaben mit einem Containerelement zu versehen, das so eingestellt ist, dass eine Kultur verwendet wird, die Punkte als Dezimaltrennzeichen verwendet.
quelle
lang
Attribut direkt auf dem Eingabeelement festlegen .lang
Attribut hat tatsächlich den Unterschied für mich gemacht, danke!Mit dem Schritt - Attribute auf die Genauigkeit der Dezimalstellen angegeben Sie wollen, und die lang Attribut [das auf ein Gebietsschema festgelegt ist, das Dezimalstellen mit Punkt formatiert ], akzeptiert Ihre numerische HTML5-Eingabe Dezimalstellen. z.B. Werte wie 10,56 annehmen; Ich meine 2 Dezimalstellen, mach das:
Sie können das weiter spezifizieren Attribut max für den maximal zulässigen Wert.
Bearbeiten Fügen Siedem Eingabeelementein lang- Attribut mit einem Gebietsschemawert hinzu, der Dezimalstellen mit Punkt anstelle von Komma formatiert
quelle
Entsprechend der Spezifikation können Sie
any
als Wert desstep
Attributs Folgendes verwenden:quelle
Verwenden Sie lang attribut für die Eingabe. Gebietsschema in meiner Web-App fr_FR, lang = "en_EN" auf der Eingabenummer und ich kann gleichgültig ein Komma oder einen Punkt verwenden. Firefox zeigt immer einen Punkt an, Chrome ein Komma. Aber beide Teilhaber sind gültig.
quelle
Leider ist die Abdeckung dieses Eingabefeldes in den modernen Browsern sehr gering:
http://caniuse.com/#feat=input-number
Daher empfehle ich, den Fallback zu erwarten und mich auf eine stark programmgesteuert geladene Eingabe [type = text] zu verlassen, um die Aufgabe zu erledigen, bis das Feld allgemein akzeptiert wird.
Bisher haben nur Chrome, Safari und Opera eine ordentliche Implementierung, aber alle anderen Browser sind fehlerhaft. Einige von ihnen scheinen nicht einmal Dezimalstellen zu unterstützen (wie BB10)!
quelle
Ich weiß nicht, ob dies hilft, aber ich bin hier gestolpert, als ich nach demselben Problem gesucht habe, nur unter dem Gesichtspunkt der Eingabe (dh ich habe festgestellt, dass ich
<input type="number" />
bei der Eingabe des Werts sowohl ein Komma als auch einen Punkt akzeptiert habe, aber nur letzteres an das Winkelmodell gebunden sein, das ich der Eingabe zugewiesen habe). Also habe ich diese kurze Anweisung notiert:Dann, auf meinem HTML-Code,
<input type="number" ng-model="foo" replace-comma />
werden Kommas im laufenden Betrieb einfach durch Punkte ersetzt, um zu verhindern, dass Benutzer ungültige (aus JavaScript-Sicht, keine Gebietsschemas!) Zahlen eingeben. Prost.quelle
$("input[type=number]").on("keydown", function(e) { if(e.keyCode === 188) { this.value += "."; e.preventDefault(); }});
(sobald Ihre Seite zusammen mit allen Zahleneingaben vollständig geladen ist)888,
dervalue
Eigenschaft wird beim Eingeben der Warnung eine Warnung888.
ausgegeben, die besagt, dass es sich nicht um eine gültige Zahl handelt (für den regulären Ausdruck ist mindestens eine Zahl nach dem Punkt erforderlich), und das Feld wird leer. Das Eingeben eines Punktes funktioniert jedoch wahrscheinlich, weil die Eingabe ihren Wert als "in Bearbeitung" betrachtet und darauf wartet, dass weitere Ziffern eingegeben werdenIch habe einen Blog-Artikel gefunden, der etwas Ähnliches zu erklären scheint:
HTML5-Eingabetyp = Zahl und Dezimalstellen / Gleitkommazahlen in Chrome
Zusammenfassend:
step
hilft , die Domäne von gültigen Werten zu definierenstep
ist1
min
undmax
einschließlich, falls angegeben).Ich würde annehmen, dass dies mit der Mehrdeutigkeit der Verwendung eines Kommas als Tausendertrennzeichen gegenüber einem Komma als Dezimalpunkt in Konflikt steht
51,983
sind tatsächlich ein seltsam analysiertes Einundfünfzigtausend, neunhundertdreiundachtzig.Anscheinend können Sie
step="any"
die Domain auf alle rationalen Zahlen im Bereich erweitern, aber ich habe es selbst nicht versucht. Für Breiten- und Längengrade habe ich erfolgreich verwendet:Es ist vielleicht nicht schön, aber es funktioniert.
quelle
Soweit ich es verstehe, gibt der HTML5
input type="number
immerinput.value
als zurückstring
.Gibt anscheinend
input.valueAsNumber
den aktuellen Wert als Gleitkommazahl zurück. Sie können dies verwenden, um einen gewünschten Wert zurückzugeben.Siehe http://diveintohtml5.info/forms.html#type-number
quelle
Haben Sie darüber nachgedacht, Javascript dafür zu verwenden?
$('input').val($('input').val().replace(',', '.'));
quelle
Eine Option ist
javascript parseFloat()
... niemals ein "text chain" --> 12.3456
mit Punkt auf ein int analysieren ...123456
(int den Punkt entfernen) eine Textkette auf ein FLOAT analysieren ...Um diese Koordinaten an einen Server zu senden, senden Sie eine Textkette.
HTTP
sendet nurTEXT
Vermeiden Sie im Client das Parsen der Eingabekoordinaten mit "
int
" und arbeiten Sie mit TextzeichenfolgenWenn Sie die Kabel in HTML mit PHP oder ähnlichem drucken ... schweben Sie zu Text und drucken Sie in HTML
quelle
Verwenden Sie das Muster
Viel Glück
quelle
HTML-Schritt Attribut
Hinweis: Das Schrittattribut funktioniert mit den folgenden Eingabetypen: Nummer, Bereich, Datum, Datum / Uhrzeit, Datum / Uhrzeit-Lokal, Monat, Uhrzeit und Woche.
quelle
Ich habe dazu einen benutzerdefinierten Code geschrieben
Wenn Sie ersetzen möchten
,
mit.
, entfernen translate_decimals Funktionen vollständig.quelle
Ich musste sicherstellen, dass Werte immer noch mit einem Komma anstelle eines Punktes als Dezimaltrennzeichen eingegeben werden können. Dies scheint ein uraltes Problem zu sein. Hintergrundinformationen finden Sie unter folgenden Links:
Ich habe es endlich mit ein bisschen jQuery gelöst. Ersetzen der Kommas durch Punkte onChange. Dies scheint in den neuesten Versionen von Firefox, Chrome und Safari bisher gut zu funktionieren.
quelle
1) 51.983 ist eine Zeichenfolgentypnummer, die kein Komma akzeptiert
Also solltest du es als Text festlegen
ersetzen mit .
und ändern Sie das Typattribut in Nummer
Schauen Sie sich http://jsfiddle.net/ydf3kxgu/ an.
Hoffe das löst dein Problem
quelle