【发布时间】:2015-02-26 19:34:47
【问题描述】:
我正在 Play Framework 中编写一个动态表单,但我对 javascript 不是很有经验。我正在尝试构建允许动态添加字段的this jQuery example。我不想只添加一个文本字段,而是每次都添加一个文本字段和一个选择框。棘手的部分是即使有selected 项,我也希望重置动态添加的选择框。
这是我的尝试,使用this answer
$('.multi-field-wrapper').each(function() {
var $wrapper=$('.multi-fields', this);
$(".add-field", $(this)).click(function(e) {
var obj=$('.multi-field:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').val('').focus();
// This following line is incorrect...
obj.find('.blank').prop('selected', true).end().trigger('chosen:updated');
}
);
$('.multi-field .remove-field',
$wrapper).click(function() {
if ($('.multi-field', $wrapper).length > 1) $(this).parent('.multi-field').remove();
}
);
}
);
<form role="form" action="/wohoo" method="POST">
<label>Stuff</label>
<div class="multi-field-wrapper">
<div class="multi-fields">
<div class="multi-field">
<div>
<input type="text" name="stuff[]"/>
</div>
<div>
<select>
<option class="blank" value="">Select a car</option>
<option value="saab">Saab</option>
<option value="mercedes" selected>Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
<button type="button" class="remove-field">Remove</button>
</div>
</div>
<button type="button" class="add-field">Add field</button>
</div>
</form>
由于它使用clone() 功能,如果选择了“Mercedes”,那么动态添加的select 下拉菜单也会选择“Mercedes”。如何让新的selects 显示空白选项?
谢谢!
编辑 - 更新了我的代码以反映我的input 和select 标签被divs 封装的事实
【问题讨论】:
-
既然可以创建新元素插入,为什么还要克隆?
-
好问题。我想这是因为我发现的原始 jsfiddle 示例使用了
clone()。这个问题实际上来自使用 Play 框架的 Web 应用程序的上下文,并且在那里我动态添加到包含这样的选择元素的视图模板。
标签: javascript jquery html