2012-01-24 60 views
0
id = [<input type=​"hidden" name=​"id" value=​"test_id">​, <input type=​"hidden" name=​"id" value=​"test_id">​] 
id.val() 
Result: "test_id" 

我有一個帶有兩個HTML Elments的「id對象」。有相同的,因爲我會更新兩個相同的元素與一個AJAX得到。對象上的jquery .val()

我得到這個變量「id」與選擇器誰搜索表單。

我的問題:

.val()檢查這個對象「ID」這兩個元素或僅第一要素?

如果其中一個元素具有不同的值,那該怎麼辦?

我在這個問題後做了什麼!

  • 我現在使用.map()從objct
  • 新增得到這兩個值的ID的平等檢查。
  • 學會了不要跳過第一大句(描述)在 jQuery的文檔=)

非常感謝!

+1

很容易看文件要求http://api.jquery.com/val/之前 –

+0

你可能已經寫了3行腳本測試這個。 – Archer

+0

@Archer如何測試3行? – Azd325

回答

2

.val()將檢查運行的元素集中第一個元素的值。如果你通過.val()這樣的函數:.val(function (index, value) {})那麼你可以得到函數運行的元素集合中每個元素的值。

你可能要退房的文檔爲.val()http://api.jquery.com/val

$('input').val(function() { 
    console.log(this.value); 
    return this.value; 
}); 

這裏是一個演示:http://jsfiddle.net/mV4U6/2/(如果更改了任何輸入的值,則所有輸入的值將是console.log版)

正如寂靜的日子所述,這要求您返回值,以便表單元素保留其值。但是,您可以使用.map()得到每個輸入的值:

$('input').map(function (index, element) { 
    console.log(this.value); 
}); 

下面是使用.map()演示:http://jsfiddle.net/mV4U6/3/

...也可能有一個循環:

var $inputs = $('input'); 
for (var i = 0, len = $inputs.length; i < len; i++) { 
    console.log($inputs[i][0].value);//or inputs[i].val() will also work 
} 
+0

'val'函數語法是爲了設置,而不是爲了獲取。如果你想獲得所有的值,你應該使用'map'而不是'val'。 – lonesomeday

+0

@ lonesomeday謝謝,這是一個很好的觀察。在使用'.val()'時返回輸入值,或者只使用'.map()'或'.each()'。 – Jasper

+1

使用'val'肯定是更難的方法。 [這是一個使用'map'的最佳方式的例子](http://jsfiddle.net/mV4U6/5/)。 – lonesomeday

1

.val()返回該選擇器匹配的第一元素的值。

此外,ID必須是唯一的,所以你要選擇另一個唯一 ID,或與class更換id。另一個選項是刪除id屬性並按名稱選擇:$('[name="id"]')

1

從jQuery源:

val: function(value) { 
    var hooks, ret, isFunction, 
     elem = this[0]; 

(Line 161 of src/attributes.js)

是與val測試的元素總是[0],集合中的第一個,不管有多少或什麼樣的值。

0

如果這是一個jQuery元素集合,.val()將只返回第一個值。

1

jQuery API docs

VAL()=獲取該組 匹配元素的第一個元素的當前值。

所以它只適用於選擇器匹配的第一個元素。

2

如果你希望所有的值,用地圖功能

var ids = id.map(function(index, element){ 
    return $(this).val(); 
})