13

私はreadonlytextを持つ関数を使用していますinput。関数を実行すると、数値 + 1 が必要です。たとえば、60 があるとします。関数を実行すると、返される数値は 61 になるはずです。

しかし、代わりに 601 が出てきます。これは、数字の 1 を文字列に追加するだけです。何が起こっているのか手がかりはありますか?減算、乗算、および除算はすべて正常に機能します。ここにスニペットがあります

 var num= $("#originalnum").val() + 1;
 $("#originalnum").val(num);

はい、いくつかの異なるバリエーションを試しましたが、何か不足していますか?

4

5 に答える 5

30

+この場合、文字列を数値に変換するには単純な単項で十分です。

var num = +$("#originalnum").val() + 1;
$("#originalnum").val(num);
于 2012-11-19T23:09:37.520 に答える
12

問題は.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 は文字列を自動的に数値に変換しようとするため、これらの演算子が「機能する」のはそのためです (文字列を変換できると仮定します)。

于 2012-11-19T23:10:38.630 に答える
7

関数を使用しparseIntて、値が数値であることを確認する必要があります ( isNaN 関数を使用します)。

var val = $("#originalnum").val();

var num = 0;

if ( !isNaN(val) )
  num= parseInt(val) + 1;
于 2012-11-19T23:08:00.057 に答える
5

使用parseInt():

var num= parseInt($("#originalnum").val(),10) + 1;

したがって、数値は文字列ではなく整数として扱われます(.val()デフォルトでは結果を文字列として扱います)

于 2012-11-19T23:08:37.400 に答える