2011-10-12 58 views
1

所以我有下面的表格,並且我希望在向表格中添加一行時將所有名稱屬性設置爲新值。 (您可能已經猜到了:我使用按鈕添加和刪除行,並根據行索引計算新的名稱屬性)。使用.each分配多個元素屬性?

<table id="orderstable" > 
      <tbody> 
    <tr> 
     <td align="top"><img src="/images/images/add_button_sm.gif" id="add_" align="top" border="0"> 
       <img src="/images/images/delete_button_sm.gif" id="del_" border="0"> 
     </td> 
     <td><input name="orderBoxes[0].A" size="3" value="0.0" type="text"></td> 
     <td><input name="orderBoxes[0].B" size="3" value="0.0" type="text"></td> 
     <td><input name="orderBoxes[0].C" size="3" value="0.0" type="text"></td> 
     <td><select name="orderBoxes[0].D"> 
      <option value="fifty">50</option> 
      <option value="oneHundred" selected="selected">100</option> 
      <option value="twoHundred">200</option> 
      <option value="threeHundred">300</option></select> 
     </td> 
    </tr> 
      </tbody> 
</table> 

我試着使用。每次得到的所有元素,然後在input.name attribbute得到....但我不能得到它的工作。有什麼想法嗎?我的代碼可能不是最高效的......我仍然是新手:

$("#orderstable > tbody > tr > td > img[id=add_]").click(function(event){ 
      var row = $(this).closest("tr").get(0); 
      var rowCopy=$(row).clone(true); 
      $(row).closest("tbody").append(rowCopy); 

      $('#orderstable tbody>tr:last>td').each(function(){ 
          $(this.input).attr(name); 
          }).val = "test"; 
      row.className+="add_"; 

回答

9

這將抓住最後一行,以及所有輸入表單元素。然後,你可以設置name通過$(this).attr('name')

$('#orderstable tr:last td :input').each(function(){ 
    $(this).attr('name', 'setyournamehere') 
}) 
+0

這工作完美。謝謝! SOrry我無法投票...沒有足夠的代表。 – user991945

+0

上面給出了swatkins後,爲什麼這裏的輸入'('#orderstable tr:last td:input')'得到所有輸入元素,包括select而另一個post不'$(e).find('input' ).attr( '名')'?是 – user991945

+0

'find('input')'通過標籤名稱獲取輸入元素。僞選擇器':input'選擇所有輸入,文本區域,選擇和按鈕元素。 –

0

您的選擇器似乎不正確。您的表沒有id'orderstable',並且沒有<tbody>

+0

*確實沒有tbody – rtcardoso

+0

葉......我試圖把這個帖子降到最低。我已經添加了它。 – user991945

0

在你.each功能,你需要使用的參數來獲得的元素,找到輸入:

$("#orderstable > tbody > tr > td > img[id=add_]").click(function(event){ 
     var row = $(this).closest("tr").get(0); 
     var rowCopy=$(row).clone(true); 
     $(row).closest("tbody").append(rowCopy); 

     $('#orderstable tbody>tr:last>td :input').each(function(i, e){ 
       var n = $(e).attr('name'); 
      alert(n); 
         }).val = "test"; 
     row.className+="add_"; 
}); 

http://jsfiddle.net/swatkins/LFvwh/

+0

問題在於,第一個td中沒有輸入元素,所以它是未定義的,最後一個td包含select而不是輸入。所以找到一個輸入不會一致地工作。 –

+0

夠公平的,這是一個簡單的解決方法 - 將':input'添加到選擇器並移除'find'方法。 – swatkins

相關問題