【问题标题】:Cloned div disappears after appendChildappendChild 后克隆的 div 消失
【发布时间】:2017-03-25 02:59:02
【问题描述】:

我正在尝试添加一个复制函数来克隆和附加一个 div。这是JS:

function NL(){
  var original = document.getElementsByClassName('form-block')[0];
  var clone=original.cloneNode(true);
  document.getElementsByTagName('form')[0].appendChild(clone);
}

document.getElementsByClassName('new-line')[0].addEventListener('click',NL);

和 HTML:

<form class='myform'>
  <div class='form-block'>
    <span class='line'>1</span>
    <button class='new-line'>New Line</button>
    <button class='new-nested'>New Nested Line</button>
    <input class='input' type='text' placeholder='Enter Value...'>
    <button class='new-input'>Add input</button>
  </div>
</form>

CodePen Link

这个想法是,当您单击“新行”按钮时,会克隆一个新的“表单块”并将其附加到第一个下方。但是,如果您现在单击“新行”按钮,新块会短暂显示然后消失。我不知道为什么。

我无法修改 HTML 中的任何内容,我只能使用 vanilla JS。

谢谢!

【问题讨论】:

标签: javascript html


【解决方案1】:

button 默认类型为submit。当没有指定类型时,它将充当提交按钮,在您的情况下,它正在尝试进行发布调用。您可以打开开发人员控制台并检查网络选项卡。为了防止这种使用 preventDefault()

function NL(event){
event.preventDefault()  // Here is the change
  var original = document.getElementsByClassName('form-block')[0];
  var clone=original.cloneNode(true);
  document.getElementsByTagName('form')[0].appendChild(clone);
}

document.getElementsByClassName('new-line')[0].addEventListener('click',NL);

DEMO

【讨论】:

    【解决方案2】:

    只需使用 type="button"

    <button type="button" class='new-line'>New Line</button>
    <button type="button" class='new-nested'>New Nested Line</button>
    

    【讨论】:

    • 我不允许编辑 HTML 文件。我只能写JS。 :(
    • 那么你必须按照@brk的建议在你的函数中使用 event.preventDefault()
    • 我刚刚尝试使用@brk 的解决方案,它满足了我的需求。不过还是谢谢你。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多