【问题标题】:How to Clone fieldset inside of a Cloned fieldset jQuery如何在克隆的字段集 jQuery 中克隆字段集
【发布时间】:2012-10-09 07:03:16
【问题描述】:

我需要在克隆的字段集中克隆一个字段集。

所以我的常规结构是这样的

当我点击 add new agenda field 时,它会成功克隆更大的字段,例如

但是当我点击add new file 时,它只会将新字段添加到父字段而不是当前字段

我的代码是这样的

<div id="agenda_placeholder">
    <div id="agenda_template">
    <fieldset>
        <legend>Agenda Details</legend>

        <ol>
            <li>
                <label for=topic_name>Topic Name</label>
                <input id=topic_name name=topic_name type=text placeholder="ACAT Briefing" required autofocus>
            </li>
            <li>
                <label for=topic_time>Time</label>
                <input id=topic_time name=topic_time type=text placeholder="2.00 - 2.30 ">
            </li>
            <li>
                <label for=presenter>Presenter</label>
                <input id=presenter name=presenter type=text placeholder="Name LastName">
            </li>


            <li>
            <div id="file_placeholder">
            <div id="file_template">
                <fieldset>
                    <legend>File Details</legend>

                        <ol>
                            <li>
                                    <label for=file_description>File Description</label>
                                    <input id=file_description name=file_description type=file_description placeholder="Ex. Weather Stats">
                            </li>
                            <li>
                                    <label for=file_name>File Name</label>
                                    <input id=file_name name=file_name type=file_name placeholder="Exact file name Eg:weather.docx">
                            </li>
                            </ol>
                        </div> <!-- file_template -->
                     </div> <!-- file_placeholder -->   
                     <button type="button" name="AddNewFile" onclick="Add();">Add New File</button> 
                </fieldset>
            </li>
         </ol>
        </div> <!-- agenda_template -->
    </div> <!-- agenda_placeholder -->
        <button type="button" name="AddNewAgenda" onclick="Add_Agenda();">Add New Agenda Field</button>
    </fieldset>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script>
        var _counter = 0;
function Add() {
    _counter++;
    var oClone = document.getElementById("file_template").cloneNode(true);


    oClone.id += (_counter + "");
    document.getElementById("file_placeholder").appendChild(oClone);
}

function Add_Agenda() {
    _counter++;
    var oClone = document.getElementById("agenda_template").cloneNode(true);
    oClone.id += (_counter + "");
    document.getElementById("agenda_placeholder").appendChild(oClone);
}

那么如何在克隆的字段集中克隆一个字段集?

【问题讨论】:

  • 老哥,我们听说你喜欢克隆,但似乎有什么问题?
  • 我猜是因为div 标签,当我单击添加文件时,它会将文件字段添加到仅父字段集查看最后一张图片
  • 嗯,对于初学者来说,html 似乎是无效的。查看红色标签:jsfiddle.net/BQDRJ
  • 您正在克隆具有ids 的元素。这将导致您的页面上出现重复的ids,这是无效的。 ids 在页面上应该始终是唯一的,因为它们唯一标识了一个元素。

标签: jquery html clone


【解决方案1】:

首先,您的 html 无效,标签重叠

在您的add 函数中声明 document.getElementById("file_placeholder") 将返回 id file_placeholder 的第一个匹配项,这是不正确的。

您需要知道单击了哪个按钮并克隆其父 div 并将克隆的 div 附加到按钮的祖父 div。

同样的逻辑可以应用于Add_agenda,但你应该注意删除添加的文件 到您正在克隆的议程。

function Add(btn) {
     _counter++;
    var parentFileTemplate = $(btn).parent("div");
    parentFileTemplate.attr('id',"file_template" + _counter );
    var parentFilePlaceHolder = parentFileTemplate.parent();
    cloned = parentFileTemplate.clone();
    cloned.attr('id',"file_template" + _counter );
    parentFilePlaceHolder.append(cloned);
  }

在调用函数时还必须添加this作为参数:

<button type="button" name="AddNewFile" onclick="Add();">

将是:

<button type="button" name="AddNewFile" onclick="Add(this);">

【讨论】:

  • 感谢您的解决方案,是否可以克隆一个空输入字段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2013-11-05
相关资源
最近更新 更多