2014-10-22 38 views
0

我想從複選框中獲取一些數據值,如下所示。複選框的數據值

<input type="checkbox" data-administration="" data-dosage="" data-date="" disabled checked/> 
<input type="checkbox" data-administration="" data-dosage="" data-date="" checked/> 
<input type="checkbox" data-administration="" data-dosage="" data-date=""/> 

我只是想從檢查,但該數據未禁用的複選框,所以我的選擇是這樣的:

var dosages = $('input[type="checkbox"]:checked:not(:disabled)'); 

看起來工作得很好,但是當我試圖獲取值像這樣:

for (var index = 0; index < dosages.size(); index++) { 
    console.log(dosages[index].data('date')); 
    } 

我得到一個「數據不是函數」的錯誤。 console.log(劑量[指數]);返回這種形式的元素:

<input type="checkbox" data-date="21.10.2014" data-dose="" data-administration="16" style="position: absolute; opacity: 0;"> 

任何線索或可能的建議我怎麼能更有效地做到這一點?

回答

1

使用括號表示法檢索給定索引處的對象時,您檢索的是DOM節點,而不是jQuery對象;你需要使用eq()

dosages.eq(index).data('date') 

而且,說實話,你可以更容易地做到這一點,同時也避免了for循環:

dosages.each(function() { 
    console.log($(this).data('date')); 
}); 

如果你想獲取這些值的數組:

var dates = dosages.map(function() { 
    return $(this).data('date'); 
}).get(); 
+0

這是我正在尋找的$,但謝謝你的提示。 – 2014-10-22 08:06:26

0

這不起作用的原因是,在jQuery對象中可迭代的元素是原始dom節點,而不是單獨的jQuery元素。您可以使用dosages.eq(index)爲每個對象獲取jQuery對象,但不需要它。

如果使用原始元素,則可以通過element.dataset對象而不是element.data()函數訪問數據屬性,該函數是jQuery結構。

或者,使用getAttribute代替數據API可以在任何地方使用,即使在古代的瀏覽器中也是如此。不需要jQuery。

for (var index = 0; index < dosages.size(); index++) { 
    console.log(dosages[index].getAttribute('data-date')); 
} 
0

這是因爲你是一個DOM元素上調用.data(一個jQuery功能),而不是一個jQuery對象。

變化

dosages[index].data('date') 

$(dosages[index]).data('date') 

除了

您所提供也可以重構使用jQuery的each太(如果你想)代碼:

$.each(dosages, function() 
{ 
    console.log($(this).data('date')); 
}); 
+0

謝謝,那該死的$正是我所錯過的。 – 2014-10-22 07:57:56

0

你需要.eq()

for (var index = 0; index < dosages.size(); index++) { 
    console.log(dosages.eq(index).data('date')); 
}