“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);
});
文本字段没有任何值。
答案 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')
。