我正在尝试根据< li>的列表索引更改所有输入名称但似乎根本没有变化.
$('.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>
注意:我不希望输入名为歌曲的ARRAY.
解决方法
您正在克隆该对象,因此更改是对副本而不是原始DOM节点进行的.
不要使用clone(),你会没事的.或者这样做:
$("li.songs input").each(function(i) { $(this).attr('name',$(this).attr('name') + i); });