2012-11-19 171 views
4

我正在使用一個函數,其中我有一個readonly文本input,並且當我執行函數時,我希望數字值+1。所以,假設我有60,當我執行的函數,返回的數字應該是61將+1添加到只讀文本輸入字段的jQuery值

但是,相反它的未來了601,這是剛剛加入1號到字符串。關於發生了什麼的任何線索?減法,乘法和除法都可以正常工作。這裏是一個片段

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

是的,我已經嘗試了幾個不同的變化,我錯過了什麼?

+0

使用一個'':-) – Bergi

回答

19

一個簡單的一元+足以讓tu氡字符串轉換成數在這種情況下:

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

1+ +運算符是一個變量指示其數字是更快然後parseInt(x,10)(用於它) – VeXii

+0

因此,當我使用前面的+號可以說一個跨度或文本輸入im表明它不是一個字符串,但它是一個int? – Dnaso

+0

不是我可以真正看到差異,但在我使用它的phonegap和東西(以及因爲它可能更好的做法等),我喜歡這個答案 – Dnaso

6

您應該使用parseInt功能,並確保該值數(請使用isNaN功能):

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

var num = 0; 

if (!isNaN(val)) 
    num= parseInt(val) + 1; 
+0

我可以使用,即使我的輸入框輸入文字? – Dnaso

+0

,並做任何機會知道爲什麼其他每一個操作的作品,但除了?即乘法除法等? – Dnaso

+0

如果它不是數字,它將返回NaN –

5

使用parseInt()

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

所以你的電話號碼被視爲一個整數,而不是一個字符串(如.val()將結果視爲默認字符串)

+1

請不要忘記提供'10'作爲*參數*參數 – Bergi

+0

好點,謝謝! – DarkAjax

9

的問題是,.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)作爲第二個參數,否則會(視瀏覽器)治療用繩子作爲八進制的前導零以及具有前導"0x"的字符串作爲十六進制。還要注意parseInt()會忽略字符串末尾的任何非數字字符,包括用戶可能打算用作小數點的句號,因此parseInt("123.45aasdf",10)返回123。同樣,parseFloat()會忽略字符串末尾的非數字字符。

此外,如果它是一個用戶輸入的值,你應該仔細檢查,它實際上是一個數字,如果不是可能提供錯誤消息。

當您使用*/-運營商JS試圖將字符串自動轉換爲數字,所以這就是爲什麼這些運營商的「工作」(假設這個字符串可以轉換)。

+0

我喜歡Number()解決方案。這是自我記錄。 –