用jQuery设置新的id

时间:2009-04-22 21:24:14

标签: javascript jquery

“this”是一个文本字段,“new_id”是一个整数。

当我应用以下代码段时:

$(this).attr('id',   this.id + '_' + new_id);
$(this).attr('name', this.name + '_' + new_id);
$(this).attr('value', 'test');

id更改,名称也会更改,但值不会更改。如果我将最后一行更改为此(因此使用字符串文字)

$('#mytextfield_3').attr('value', 'test');

它有效。

有什么想法吗?

- 编辑 - 感谢Steerpike的快速插件测试 - 我相信它应该可行,但我找不到错误。

以下是更多代码:

我使用

创建克隆
clone = $(this).find('.clone_fields_container:first').clone();

“clone”现在包含一个嵌入了输入字段的div。

生成新ID后:

  /** Iterate over input and select fields in container */

  clone.children('input,select,textarea').each(function() {
    $(this).attr('id',   this.id + '_' + new_id);
    $(this).attr('name', this.name + '_' + new_id);
    $(this).val('test');
    console.log(this);
  });

文本字段没有任何值。

5 个答案:

答案 0 :(得分:27)

我刚刚编写了一个快速插件,可以使用相同的代码片段运行测试,但效果很好

$.fn.test = function() {
      return this.each(function(){
        var new_id = 5;
        $(this).attr('id',   this.id + '_' + new_id);
        $(this).attr('name', this.name + '_' + new_id);
        $(this).attr('value', 'test');
      });
    };

$(document).ready(function() {
    $('#field_id').test()
});

<body>
  <div id="container">

  <input type="text" name="field_name" id="field_id" value="meh" />
  </div>
</body>

所以我只能假设代码中还有其他内容。你能提供更多细节吗?

答案 1 :(得分:2)

你试过吗

$(this).val('test');

而不是

$(this).attr('value', 'test');

val()通常更容易,因为您需要更改的属性在不同的DOM元素上可能会有所不同。

答案 2 :(得分:0)

编辑:根据您的评论并假设this是克隆的元素。

 $(this).clone()
        .attr( 'id', this.id + '_' + new_id )
        .attr( 'name', this.name + '_' + new_id )
        .val( 'test' )
        .appendTo('#someElement');

完整示例

 <script type="text/javascript">
    var new_id = 0;
    $(document).ready( function() {
       $('#container > input[type=button]').click( function() {
            var oldinp = $('input#inp')[0];
            var newinp = $(oldinp).clone()
                                  .attr('id',oldinp.id + new_id )
                                  .attr('name',oldinp.name + new_id )
                                  .val('test')
                                  .appendTo($('#container'));
            $('#container').append('<br>');
            new_id++;
        });
     });
 </script>


 <div id="container">
 <input type="button" value="Clone" /><br/>
 <input id="inp" name="inp" type="text" value="hmmm" /><br/>
 </div>

答案 3 :(得分:0)

当您在attr() command中设置所有属性时会发生什么?

$(this).attr({
               id : this.id + '_' + new_id,
               name: this.name + '_' + new_id,
               value: 'test' 
             });

答案 4 :(得分:0)

使用.val()而非attr('value')