2010-09-17 84 views
1

我有一個隱藏的輸入#start這個值是用來顯示一系列返回的數據(這是一個索引的起點),每次你點擊#next我需要增加其價值。基於點擊按鈕增加一個隱藏的輸入值

$("#next").click(function() { 
    $("#start").val() + 80; 
)}; 

這是正確的嗎?或者,還有更好的方法? thx all!

回答

3

您需要將值轉換爲整數,添加任何數量的微博,保存回:

$("#next").click(function(){ 
     var startElement = $("#start"); 
     var value = parseInt(startElement.val(), 10); 
     startElement.val(value + 80);  
}); 

工作樣本:http://jsfiddle.net/QZgAf/

+0

@KP這會改變#start的值是否正確? – 2010-09-17 20:34:29

+1

你應該包含一個帶'parseInt'函數的基數,以確保返回的值是基數10(http://www.w3schools.com/jsref/jsref_parseInt.asp) – Mottie 2010-09-17 20:41:44

+0

@fudgey編輯並自己修復它(我剛剛因爲我完全同意你的看法)。不要被弄糊塗;這就是這個社區所關心的。 – 2010-09-17 20:47:32

1

你所要做的只是檢索val並向其中添加80,但實際上並未將其設置回元素上的值。要做到這一點,請嘗試以下操作:

$("#next").click(function() { 
    $("#start").val(parseInt($("#start).val()) + 80); 
)}; 

雖然這樣做效率有點低,因爲您會選擇#start兩次。相反,我會緩存#開始選擇在一個變量:

$("#next").click(function() { 
    var startElement = $("#start"); 
    startElement.val(parseInt(startElement.val()) + 80); 
)}; 
+0

正確。 'val()'不是一個屬性,而是一個函數。沒有參數時,它返回值,並用一個參數設置值。 – Fosco 2010-09-17 20:22:22

+4

'val'返回一個字符串,而不是一個數字。因此,添加'80',您將以'8080'結束。 – Mottie 2010-09-17 20:23:41

+0

我已更正了包含parseInt的代碼。 – Soviut 2010-09-17 20:29:25

0

用少量封閉模式:

$("#next").click(function cli() { 
    var v = 0; 

    return function() { 
     $("#start").html(v += 80); 
    }; 
}()); 
+0

每次點擊按鈕,它會設置80。 – NAVEED 2010-09-17 20:27:13

6

試試這個(demo):

$("#next").click(function() { 
    $("#start").val(function(i,v){ 
    return parseInt(v,10) + 80 || 0; 
    }); 
}); 
+1

這個例子需要更好地解釋發生了什麼。 – Soviut 2010-09-17 20:31:23

+0

@Soviut:基本上你可以在'val'中添加一個函數。 'i'是索引,'v'是由jQuery(http://api.jquery.com/val/)設置的值。所以它會解析'v'來得到整數值然後加到80(但是最初的值是未定義的,所以給出了一個不能加到80的'NaN',所以它返回0)。 – Mottie 2010-09-17 20:38:15

+0

@fudgey與@KP's有什麼不同?我不明白這足以知道陷阱! – 2010-09-17 20:40:35

1

這是另一種方法。它直接訪問value屬性並使用~~來避免可能的八進制或NaN問題。

$("#next").click(function() { 
    var start = document.getElementById("start"); 
    start.value = ~~start.value + 80; 
}); 

或者更好的辦法是隻運行#start的選擇器一次如果按鈕可以被點擊多次。

// cache "start" outside the handler 
var start = document.getElementById("start"); 

$("#next").click(function() { 
    start.value = ~~start.value + 80; 
}); 
+0

'~~'不會保護像「0x22」這樣的值 – jAndy 2010-09-17 20:53:24

+0

@jAndy - 是的,但有什麼可能? :o)我唯一的目的是爲了避免空字符串。看起來好像隱藏輸入的唯一目的是增量。所以考慮到明顯的上下文,'~~'應該沒問題。 – user113716 2010-09-17 21:02:41

+0

針對所有可能性...:p – jAndy 2010-09-17 21:19:16

相關問題