用jQuery设置新的id

“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); }); 

文本字段没有任何值。

我刚刚编写了一个快速插件来使用相同的代码段运行测试,它运行正常

 $.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() });  

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

你试过了吗

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

代替

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

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

当您在一个attr()命令中设置所有属性时会发生什么

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

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

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

完整的例子

   


使用.val()不是attr('value')