2014-10-22 70 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')); 
}