【问题标题】:Add new fieldset elements with button click通过单击按钮添加新的字段集元素
【发布时间】:2011-07-15 23:57:28
【问题描述】:

JavaScript 有什么方法可以通过单击按钮生成字段集中的所有元素?下面的代码显示了一个字段集中的两个文本框和一个文本区域。当我按下“添加项目按钮”时,我想在该字段集中生成相同的文本框和文本区域。

非常感谢您的帮助。

<fieldset id="fieldset">
<legend id="legend">Professional development</legend>
<p>Item                     <input type ="text" size="25"   name="prof_item" /><br /></p>
<p>Duration                 <input type ="text" size="25"   name="prof_duration" /><br /></p>
<p>Enlargement              <label for="enlargement"></label><p></p>
                            <textarea name="textarea" cols="71" rows="5" id="prof_enlargement">
</textarea></p>
<p><input type="submit" name="Submit" value="Add new item" id="add_prof" /></p>
</fieldset>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以克隆它们。首先用父 div 包装这些元素,例如“模板”:

    <div id="template">
      <p>Item <input type ="text" size="25" name="prof_item" /><br /></p>
      <p>Duration <input type ="text" size="25" name="prof_duration" /><br /></p>
      <p>Enlargement <label for="enlargement"></label></p>
       <p><textarea name="prof_enlargement" cols="71" rows="5" id=""></textarea></p>
    </div>
    

    第二个占位符将包含您添加的所有克隆:

    <div id="placeholder">
      <div id="template">
         <p>Item <input type ="text" size="25" name="prof_item" /><br /></p>
         ...
       </div>
    </div>
    

    最后这段 JS 代码会在其中添加元素:

    var _counter = 0;
    function Add() {
        _counter++;
        var oClone = document.getElementById("template").cloneNode(true);
        oClone.id += (_counter + "");
        document.getElementById("placeholder").appendChild(oClone);
    }
    

    只需在按钮单击事件中调用“添加”函数即可。计数器需要避免多个元素具有相同的 ID。

    现场测试用例:http://jsfiddle.net/yahavbr/eW6j4/

    【讨论】:

    • 非常感谢您的帮助。它现在运行良好。 @影子向导
    【解决方案2】:

    我更喜欢javascript方式

    var fieldset= document.getElementById('fieldset');
    var fieldParent = fieldset.parentNode;
    var newFieldSet = document.createElement('fieldset');
    newFieldSet.innerHTML = fieldset.innerHTML;
    fieldParent.appendChild(newFieldSet);
    

    问候:)

    【讨论】:

    • 克隆元素比分配相同的内部 HTML 更好,但你的想法好。
    【解决方案3】:
    $('#button').click(function() {
        $('#fieldset').clone().insertAfter($('#fieldset'));
    });
    

    试试这样的,Clone() 很有用 http://api.jquery.com/clone/

    -在您的评论后编辑- 将此添加到您的 htmlpage:

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
    <script>
    $(document).ready(function() {
        $('#add_prof').click(function() {
                $('#fieldset').clone().insertAfter($('#fieldset'));
        });
    });
    </script>
    

    -在您发表评论后再次编辑-

    为了让函数也能处理新添加的输入,我们使用“live”。我建议的 .click 在执行代码时对元素起作用。当我们使用 .live 时,该函数将与您选择的每个现有元素一起执行,但也与您选择的未来元素一起执行。使用这个:

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
    <script>
    $(document).ready(function() {
        $('fieldset input').live('click',function() {
                $(this).parent('fieldset').clone().insertAfter($(this).parent('fieldset'));
        });
    });
    </script>
    

    如果代码有效,请将此答案标记为“接受的答案”,以便其他有相同问题的用户可以立即看到有效的代码。

    【讨论】:

    • @rsplak 我应该在代码中的哪个位置放置您的提取物?我尝试将 之前和之后放在
    • 感谢您的帮助。它工作得很好,但我怎样才能让它工作,以便按钮在克隆的字段集上再次工作? @rsplak
    • 再次感谢您的回答。问题是我有四个不同的字段集,如下所示:
      。如何使它适用于所有四个字段集?我以前的代码是这样做: @rsplak
    • 我所做的最后一次编辑不是按 ID 选择的,而是按元素类型选择的。我想你想要这个,所以我的做法与之前的更新不同。这次我使用 $(this).parent('fieldset') 来查看单击输入时要克隆的字段集。之后,我在你点击的字段集之后添加字段集。试试代码,祝你好运:)
    • 仍然无法正常工作。很抱歉一直打扰您。我真的不知道问题出在哪里。我之前只能为每个字段集使其工作为每个指定 id,例如
    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 2021-03-03
    • 2019-05-19
    • 2015-12-31
    • 2015-07-02
    • 1970-01-01
    • 2015-10-18
    • 2015-01-29
    相关资源
    最近更新 更多