問題は.val()
、要素の値を文字列として返すことです+
。文字列に対して演算子を使用すると、文字列連結が行われます。最初に値を数値に変換する必要があります。
var num = +$("#originalnum").val() + 1; // unary plus operator
// OR
var num = Number($("#originalnum").val()) + 1; // Number()
// OR
var num= parseFloat($("#originalnum").val()) + 1; // parseFloat()
// OR
var num= parseInt($("#originalnum").val(),10) + 1; // parseInt()
parseInt()
使用する場合は、基数 (10) を 2 番目のパラメーターとして含める必要があることに注意してください。そうしないと、(ブラウザーによっては) 先行ゼロの文字列が 8 進数として、先行ゼロ付きの文字列が"0x"
16 進数として扱われます。parseInt()
は、ユーザーが小数点として意図した可能性のあるピリオドを含め、文字列の末尾にある数字以外の文字を無視するため、 をparseInt("123.45aasdf",10)
返すことにも注意してください123
。同様parseFloat()
に、文字列の末尾にある数字以外の文字は無視されます。
また、ユーザーが入力した値である場合は、それが実際に数値であることを再確認し、そうでない場合はエラー メッセージを表示する必要があります。
*
,/
または演算子を使用すると、 -
JS は文字列を自動的に数値に変換しようとするため、これらの演算子が「機能する」のはそのためです (文字列を変換できると仮定します)。