动态地添加和删除嵌套的(两级)输入元素


To add&remove nested(two-level) input elements dynamically?

我搜索了这个问题几次,但没有得到解决方案,这就是我在这里问的原因。我已经知道如何添加&删除一级输入元素,如下:

<script type="text/javascript">
    $(document).ready(function() {
        $('#btn_addOpt').click(function () {
            var opt = $('<div></div>');
            opt.append('<p>Answer:</p>');
            opt.append('<input type="text" name="lable[]">');
            $('#opt').append(opt);
        });
        $('#btn_removeOpt').click(function () {
            $('#opt div:last').remove();
        });             
    });
</script>

html的主体是:

<form action="" method="post">
    What's the question?<br/>
    <input type="text" name="name"/><br />
    <input type="button" id="btn_addOpt" value="Add Answer"/>
    <input type="button" id="btn_removeOpt" value="Remove Answer"/><br/>
    <div id="opt"></div><br/>
    <input type="submit" value="submit"/>
</form> 

这个想法是当我点击"添加答案"按钮时,一组元素:

<p>Answer:</p>
<input type="text" name="lable[]">

将被添加,也将被删除后,我点击"删除答案"按钮。但是,我尝试做的是将上面的所有元素作为一个组,其中包括:

What's the question?<br/>
<input type="text" name="name"/><br />
<input type="button" id="btn_addOpt" value="Add Answer"/>
<input type="button" id="btn_removeOpt" value="Remove Answer"/><br/>
<div id="opt"></div><br/>

我尝试动态地添加&删除这个组。所以我试试:

<script type="text/javascript">
    $(document).ready(function() {
        $('#btn_addQues').click(function () {
            var que = $('<div></div>');
            que.append('<p>What''s the question?</p>');
            que.append('<input type="text" name="name"/>');
            que.append('<input type="button" id="btn_addOpt" value="Add Answer"/>');
            que.append('<input type="button" id="btn_removeOpt" value="Remove Answer"/><br/>');
            que.append('<div id="opt"></div><br/>');
            $('#question').append(que);
        });
        $('#btn_removeQues').click(function () {
            $('#question div:last').remove();
        })
        $('#btn_addOpt').click(function () {
            var opt = $('<div></div>');
            opt.append('<p>Answer:</p>');
            opt.append('<input type="text" name="lable[]">');
            $('#opt').append(opt);
        });
        $('#btn_removeOpt').click(function () {
            $('#opt div:last').remove();
        });             
    });
</script>

正文变成:

<body>
    <input type="button" id="btn_addQues" value="Add Question"/>
    <input type="button" id="btn_removeQues" value="Remove Question"/>
    <form action="" method="post">
        <div id="question"></div>
        <input type="submit" value="submit"/>
    </form> 
</body>

但是,它可以动态地添加&删除整个元素组,但是在组内,"添加答案"answers"删除答案"按钮不起作用。似乎有一些冲突。或者可能有其他方法可以做到。基本上,我尝试做的是通过按钮添加和删除一组元素,并且在组中还有两个按钮用于添加和删除一些其他输入元素。所以这是一个嵌套的(两层)元素创建。所有填写的信息将被张贴在另一个页面上。我不确定我是否解释清楚了,但有人能帮忙吗?请提供一些代码,谢谢!

您需要将onclick事件重新绑定到新组中创建的新html元素。因此,在复制HTML之后,您需要执行$("#btn_addQues ") .click("etc…"),因此您可能需要考虑为它们创建可重用的函数。

但是,如果您要使用id,则需要它们是唯一的