我现在正在做一个表单,我想在用户按下按钮时自动添加另一个输入区域,与上面的行相同。
<div class="row" id="1">
<div class="form-group col-lg-2">
<select class="form-control" id="select">
<option selected>Tag Name</option>
<option value="p">p</option>
<option value="br">br</option>
</select>
</div>
<div class="form-group col-lg-2">
<select class="form-control" id="class">
<option selected>Tag Class</option>
<option value="Day">Day</option>
<option value="BlockTime">BlockTime</option>
<option value="BlockTitle">BlockTitle</option>
<option value="Session">Session</option>
<option value="Person">Person</option>
<option value="Firm">Firm</option>
</select>
</div>
<div class="form-group col-lg-7">
<textarea class="form-control" rows="3" id="textArea">Please put the content inside this html tag.</textarea>
</div>
<div class="form-group col-lg-1">
<input type="button" class="btn btn-default" onclick="addLine()" value="Add">
</div>
</div>
这是一行输入区域,当用户按下"添加"按钮时,我想在输入区域下面添加相同的html。也许使用JQuery?
它应该看起来像这个。
这就是我尝试的:
function addLine() {
$('#1').clone().attr('id', '').appendTo('form');
}
目前,这似乎是可行的,但如果我想将id添加到新创建的元素中,比如2、3、4,我该怎么办?
我也不确定我做的是正确的,还是最好的方式。
jQuery 解决方案
var n = 8 // adjust it in some way
var inputArea = ['<div class="form-group col-lg-'+n+'">',
'<textarea class="form-control" rows="3" id="textArea-'+n+'">',// let's be nice and not use same IDs twice
'Please put the content inside this html tag.',
'</textarea></div>'].join('')
$('.row').append(inputArea);
但是请确保您的后端已准备好处理该输入。
编辑:这个解决方案可能并不花哨,使用clone()也完全可以。为了跟踪id,我会添加一个简单的变量,比如n,每次添加新的输入区域时我都会增加这个变量,然后将其添加到id中。
所以,初始化
var n = 0;
addLine:
n++;
设置id(在addLine中也可行)
$target.attr('id', 'inputArea-'+n);//Assuming that $target is the inputArea in question
您可以从DOM中的蓝图结构进行复制,并将副本附加在按钮后面。
var addline = function() {
var invisibleNewLine = jQuery('#blueprint').clone();
var visibleNewLine = invisibleNewLine.removeClass('invisible');
jQuery('#target').append(visibleNewLine);
};
jQuery('#add-line').click(addline);
删除元素上的onClick
处理程序,并使用jQuery绑定事件。
<button id="add-line" class="btn btn-default">Add</button>
请在此处查看小提琴:JSFiddle