Das Folgende kann allgemein nützlich sein.
Erstens sind HTML-Formularfelder auf Text beschränkt . Dies gilt insbesondere für Textfelder, auch wenn Sie sich bemüht haben, sicherzustellen, dass der Wert wie eine Zahl aussieht .
Zweitens hat JavaScript den +
Operator mit zwei Bedeutungen überladen : Es fügt Zahlen hinzu und verkettet Zeichenfolgen. Es hat eine Präferenz für Verkettung, so dass selbst ein Ausdruck wie 3+'4'
als Verkettung behandelt wird.
Drittens wird JavaScript versuchen, Typen dynamisch zu ändern, wenn dies möglich ist und erforderlich ist. Beispielsweise '2'*'3'
werden beide Typen in Zahlen geändert, da Sie Zeichenfolgen nicht multiplizieren können. Wenn einer von ihnen nicht kompatibel ist, erhalten Sie NaN
keine Nummer.
Ihr Problem tritt auf, weil die aus dem Formular stammenden Daten als Zeichenfolge betrachtet werden und +
daher eher verkettet als hinzugefügt werden.
Wenn Sie vermeintlich numerische Daten aus einem Formular lesen, sollten Sie diese immer durch parseInt()
oder drücken parseFloat()
, je nachdem, ob Sie eine Ganzzahl oder eine Dezimalzahl wünschen.
Beachten Sie, dass keine der beiden Funktionen eine Zeichenfolge wirklich in eine Zahl konvertiert . Stattdessen wird die Zeichenfolge von links nach rechts analysiert, bis ein ungültiges numerisches Zeichen oder das Ende erreicht ist, und das Akzeptierte konvertiert. Im Fall von parseFloat
umfasst dies einen Dezimalpunkt, aber nicht zwei.
Alles nach der gültigen Nummer wird einfach ignoriert. Sie schlagen fehl, wenn die Zeichenfolge nicht einmal als Zahl beginnt. Dann wirst du bekommen NaN
.
Eine gute Allzwecktechnik für Zahlen aus Formularen ist ungefähr so:
var data=parseInt(form.elements['data'].value); // or parseFloat
Wenn Sie bereit sind, eine ungültige Zeichenfolge auf 0 zusammenzuführen, können Sie Folgendes verwenden:
var data=parseInt(form.elements['data'].value) || 0;