使用jquery append重复克隆隐藏的html

Posted

技术标签:

【中文标题】使用jquery append重复克隆隐藏的html【英文标题】:Use jquery append to clone hidden html repeatedly 【发布时间】:2013-02-26 15:44:26 【问题描述】:

我有一个表单,我需要有选择地一遍又一遍地重复(克隆和附加到)一大块表单域。

所以,我所做的是将我想要复制的代码放在页面中的一个隐藏 div 中,然后我基本上希望用户能够单击一个显示“添加”的按钮,然后在最后一批下添加这些空白表单字段,次数不限。

我要克隆的html如下:

 <div style="display: none;">
        <div class="grab-me">
          <input name="foo[]" />
          <input name="bar[]" />
          <input name="oth[]" />
        </div>
 </div>

我现在的jquery是:

$(function()
        $('.add-member').live("click", function(e)
            e.preventDefault(e);
            var grab = $('.grab-me');
            grab.appendTo('#register');

        );
    );

但是这样做是在每次单击按钮时复制表单字段。所以我点击一次,它按预期添加了一次表单字段。再次点击按钮,这次添加了两次表单域,再次点击,添加了三组表单域!

我只希望它在每次点击时一次性添加一组表单字段。

任何建议都将非常感激!

【问题讨论】:

不要再使用.live(),它已被弃用。请改用.on(),但请先阅读文档。 谢谢杰克,我很清楚这一点,但客户使用的是 1.6.3 并且不希望更改。 【参考方案1】:

这是因为一旦复制,您就会拥有两个 .grab-me 元素。您应该在克隆元素后删除该类:

var grab = $('.grab-me')
    .clone()
    .removeClass('grab-me')
    .appendTo('#register');

【讨论】:

【参考方案2】:

$('.grab-me').eq(0) 只得到一个表格(第一个带有grab-me类的表格)

$(function()
        $('.add-member').live("click", function(e)
            e.preventDefault(e);
            var grab = $('.grab-me').eq(0);
            grab.appendTo('#register');

        );
    );

【讨论】:

这只会添加一次html,然后就不能再工作了。谢谢你的回复!【参考方案3】:

您可以做几件事,我想到的最简单的方法是添加 .first() 调用:

$(function()
        $('.add-member').live("click", function(e)
            e.preventDefault(e);
            var grab = $('.grab-me').first().clone();
            grab.appendTo('#register');
        );
); 

您遇到的问题是在您第一次添加它之后,您最终会得到两个具有 .grab-me 类的 div,因此您的 jquery 会同时抓取两者。

【讨论】:

它仍然有同样的问题,就是每次按下它时都比它应该多添加一组。感谢您的回复! 或者把最后一行改成$("#register .grab-me").removeClass("grab-me");。比克隆更容易:) 你知道,这是我的第一个答案!但后来我觉得最好只抓住第一个项目。 @John 真的吗?它应该只从列表中获取一个元素。这很奇怪。 上面的当前代码块只添加了一次html。随后的点击什么也不做。奇数。

以上是关于使用jquery append重复克隆隐藏的html的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:克隆元素和事件

jQuery .append DOM 更新 [重复]

使用 JavaScript 将 HTML DOM 结构(或克隆)转换为 JSON,可能的 JQuery [重复]

jquery append()详解

添加/删除按钮不适用于重复的表单字段 - jquery

使用带有添加和删除元素条件的 jQuery 克隆表单