2012-04-11 70 views
0

我有這樣的方法:的jQuery如何通過屬性列表迭代值

$("#btnupdateofficeapprovers").click(function() { 
     var checkedInvoiceLineIds = $(":checked").attr("data-invoicelineid"); 

     checkedInvoiceLineIds.each(function (index) { 
      alert(index + ': ' + $(this).text()); 
     }); 
    }); 




<table> 
     @foreach (var item in Model.Invoice.InvoiceLines) { 
      <tr class="subheader"> 
       <td> 
        <input type="checkbox" class="invoicelinecombobox" [email protected] > 
       </td> 
      </tr> 

     } 
    </table> 

<div id="updateapproversdiv"> 
    @Html.DropDownListFor(modelItem => Model.Invoice.ApprovedForPaymentUserId, Model.OfficeApprovers, new { @class = "officeapproverddl" }) 
    <input type="button" id="btnupdateofficeapprovers" class="button invisibleforprint" value="Update" /> 
</div> 

我想要做的就是讓所有的invoicelineid,並把他們集中。

接下來我想穿過列表中的每個ID並將其顯示在警報中。

問題是這是拋出一個很大的例外。任何人都知道如何解決?這個怎麼做?

+0

請告訴我們您的HTML。 – jfriend00 2012-04-11 08:44:26

回答

0

attr()返回一個字符串。你不能迭代一個字符串each()。這可能是你想要做什麼:

$("#btnupdateofficeapprovers").click(function() { 
    var ids = $("input:checked").attr("data-invoicelineid").split(' '); 
    $.each(ids, function(i, v) { 
     alert(i + ': ' + v); 
    }); 
}); 

編輯:你可以這樣做@Armatus建議過:

$("#btnupdateofficeapprovers").click(function() { 
    var $els = $("input:checked"); 
    $els.each(function(i){ 
     alert(i + ': ' + $(this).attr('data-invoicelineid')); 
    }); 
}); 
0

通過jQuery對象。每次迭代。你指定checkedInvoiceLineIds與.attr()這是一個字符串,並沒有。每個

讓它= $(':checked'),然後在.each訪問它的.attr。

1

您可以簡單地使用jQuery選擇 「具有屬性」:http://api.jquery.com/has-attribute-selector/

的jsfiddle:http://jsfiddle.net/NF5Ss/1/

$("#btnupdateofficeapprovers").click(function() { 
    var checkedInvoiceLineIds = $(":checked[data-invoicelineid]"); 

    console.log(checkedInvoiceLineIds); 

    checkedInvoiceLineIds.each(function(index) { 
     alert(index + ': ' + $(this).data('invoicelineid')); 
    }); 
});​