使用jQuery循环对我来说不起作用

使用jQuery循环对我来说不起作用,jquery,html,Jquery,Html,我有如下表数据,每行都有不同值的数据属性。我想使用jQuery收集这些值。我已经在jQuery中编写了逻辑,但是循环对我来说不起作用 <table id="tblAdAttribute"> <thead> <tr> </tr> </thead> <tbody> @if (Model != null) { foreach (var item in Model)

我有如下表数据,每行都有不同值的数据属性。我想使用jQuery收集这些值。我已经在jQuery中编写了逻辑,但是循环对我来说不起作用

  <table id="tblAdAttribute">

  <thead>

    <tr> </tr>

  </thead>
  <tbody>
    @if (Model != null)
    {
         foreach (var item in Model)
            {
                <tr>
                   <td>@Html.DisplayFor(modelItem => item.Title)</td>
                   <td>
                       <a href="#"><input type="checkbox" 
                   name="chkSelected" 
                   data-values="'@item.Title', @((int)item.DataType))"></a>
                  </td>
                </tr>
               }
       }
    </tbody>
  </table>

当我发出警报时,它总是给出第一行值,而不循环其余的行。

您总是得到相同的值,因为您在循环的每个迭代中选择相同的东西。您不需要使用
最近的
同级
来遍历DOM,因为所需的
数据
属性直接位于复选框本身上。试试这个:

var getSelectedAttributes = function() {
    var values = $("input[name='chkSelected']:checked").map(function() {
        return $(this).data('values');
    }).get();
    alert(values);

    // do something with the values array here...
}
这里我使用
map()
创建一个数据属性数组。

为什么不使用:

$("input[name='chkSelected']:checked").each(function () {
    singlevalue = $(this).data("values");
    values.push(singlevalue);
    alert(singlevalue);
}).promise().done(function(){
    SelectedAttributes =  values.join(", ");
});

只是好奇:你为什么在锚内使用复选框?请拉小提琴。!谢谢。仍然得到相同的值:(但在FireBug中,我可以看到复选框数据属性中添加了正确的值。我怀疑它与html代码的问题。你能从技术上解释一下promise()的用法吗?最初它似乎返回空的“值”,然后循环一次就填充了“值”?引导mepromise()与done()一起使用)方法只允许在所有以前的回调(定义为异步的)(本例中为每个())都已执行时调用回调。这是一个不同的方法,我们也可以使用when()。
$("input[name='chkSelected']:checked").each(function () {
    singlevalue = $(this).data("values");
    values.push(singlevalue);
    alert(singlevalue);
}).promise().done(function(){
    SelectedAttributes =  values.join(", ");
});