2011-08-19 151 views
4

我試圖根據<li>的列表索引更改所有輸入名稱,但它看起來完全沒有改變。現在使用JQUERY更改輸入名稱

$('.test').click(function() { 
for(var i=0;i<$("li.songs").length;i++) 
{ 
    var ob = $("li.songs").eq(i).clone(); 
    ob.find('input').each(function() 
    { 
    this.name = this.name+i; 
    alert(this.name); //just checking if does it change 
    });  
} 
}); 

,警報顯示我想正確的名稱,但該名稱沒有改變,當我檢查的元素,並嘗試提交表單,並顯示所有的POST值。前

例預期輸出改變:

<li class="songs"><input type="text" name="song" /></li> 
<li class="songs"><input type="text" name="song" /></li> 
<li class="songs"><input type="text" name="song" /></li> 

變化後:

<li class="songs"><input type="text" name="song1" /></li> 
<li class="songs"><input type="text" name="song2" /></li> 
<li class="songs"><input type="text" name="song3" /></li> 

注:我不想命名的歌曲是一個數組的輸入。

+0

實際上這是一個典型的服務器端任務,您可能會在那裏生成正確的名稱。替代方案 - 你可以刪除所有這些項目,並用JS寫回(只是我認爲這不是一個好習慣) – Mike

回答

6
$("li.songs").each(function(i) { 
    $(this).find('input').attr('name', 'song' + i); 
}); 
18

你是克隆的對象,這樣的改變是爲了副本而不是原始的DOM節點。

不要使用clone(),你會沒事的。或者這樣做:

$("li.songs input").each(function(i) { 
    $(this).attr('name', $(this).attr('name') + i); 
});