可能是一个常见问题,但我正在寻找帮助来解决和理解问题。
我正在制作一个允许您添加更多字段的表单。这是一个精简版:
HTML
<div class="to_copy">
<p>Here is an empty form field.</p>
<input name="input" />
</div>
<a href="#" id="copy">Copy</a>
的jQuery
$(document).ready(function() {
var to_copy = $(".to_copy").clone();
$("#copy").on("click", function(e) {
// Some unwritten code to change name="input" to name="input1"
$(this).before(to_copy);
e.preventDefault();
});
});
单击复制时,它会运行一次,但不会再运行。如果我检查发生了什么,to_copy
变量具有正确的值,并且不会触发任何错误。
任何人都可以解释为什么它不起作用,并指出我正确的方向。
我的下一个阶段是修改字段名称以附加一个数字(即input,input1,input2等),或许可以解释为什么我选择了这种方法。
这是一个实时版本:http://jsfiddle.net/nGmYb/1/
答案 0 :(得分:4)
问题是您在click事件中将克隆附加到DOM。在第二次单击时,您将重新添加元素到DOM。请尝试以下方法:
$(document).ready(function() {
var to_copy = $(".to_copy").clone();
$("#copy").on("click", function(e) {
e.preventDefault();
$(this).before(to_copy.clone());
});
});
答案 1 :(得分:1)
一旦克隆了DOM元素,就会有一个副本。当你使用.before
时,会附加它;当您使用.before
两次时,它会被移动。
解决方案就是重复克隆它:
$(document).ready(function() {
$("#copy").on("click", function(e) {
var to_copy = $(".to_copy").last().clone();
$(this).before(to_copy);
e.preventDefault();
});
});