我从这个标记开始:
<div> <span> <label for="Item[0]">Item #1</label> <input type="text" value="" name="Item" id="Item[0]"/> </span> </div>
在每个按钮上单击我想要添加另一个完全相同的部分,但增加索引.
<div> <span> <label for="Item[0]">Item #1</label> <input type="text" value="" name="Item" id="Item[0]"/> </span> </div> <div> <span> <label for="Item[1]">Item #2</label> <input type="text" value="" name="Item" id="Item[1]"/> </span> </div>
我正在尝试使用这个javascript:
$(document).ready(function(){ var count = <%= Items.Count - 1 %>; $('#AddItem').click(function(e) { e.preventDefault(); count++; var tb = $('#Item[0]').clone().attr('id','Item[' + count + ']'); var label = document.createElement('label') label.setAttribute('For','Item[' + count + ']') $('#ItemFields').append(label); $('#ItemFields').append(tb); }); });
所以有几个问题:
附加标签有效,但我的克隆文本框没有.
我无法弄清楚如何在div和span中将标签和文本框包装在一起.如果我试试
$('#ItemFields').append('<div><span>' + label + tb + '</span></div>');
它输出[object HTMLLabelElement]而不是实际标签.如果我尝试将它们分成多个append语句,它会自行终止div和span.我是jQuery / Javascript的新手,所以我不太确定我做错了什么.
解决方法
克隆整个块的示例(但是添加了一个item类),因为我认为它对未来更加健壮(例如,如果您更改项目的html)并处理标签的文本:
<html> <head> <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Demo</title> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('#AddItem').click(function(e) { e.preventDefault(); var count = $('.item').length; var id = 'Item[' + count + ']'; var item = $('.item:first').clone(); item.find('input:first').attr('id',id); item.find('label:first').attr('for',id) .html('Item #' + (1+count)); item.appendTo('#ItemFields'); }); }); </script> </head> <body> <input type="button" id="AddItem" value="Add" /> <div id="ItemFields"> <div class="item"> <span> <label for="Item[0]">Item #1</label> <input type="text" value="" name="Item" id="Item[0]"/> </span> </div> </div> </body> </html>