使用JQUERY更改输入名称

18
我试图根据
  • 标签的列表索引更改所有标签的名称,但似乎根本没有改变。
    $('.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>
    

    注意:我不想让名为“song”的输入变成数组。


  • 实际上这是一个典型的服务器端任务,你可以在那里生成正确的名称。另一种选择是使用JS删除所有这些项目并写回(但我认为这不是一个好的做法)。 - Mike
    2个回答

    39

    你正在克隆对象,因此更改是针对副本而不是原始DOM节点完成的。

    不要使用clone(),这样就没有问题了。或者可以这样做:

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

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

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接