用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')
。