亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 JavaScript(js) 克隆和刪除 html 表單?

如何使用 JavaScript(js) 克隆和刪除 html 表單?

米琪卡哇伊 2021-12-23 15:49:34
我想克隆一個表單,然后可以選擇刪除我剛剛創建的表單。我知道如何克隆它,但不知道如何刪除它。我只能刪除原始表單,而不能刪除克隆表單。這是我的代碼:function duplicate(id) {  var elmnt = document.getElementById(id);  var cln = elmnt.cloneNode(true);  var num = 1;  cln.id = id + num;  document.body.appendChild(cln);}function remove(id) {  var elem = document.getElementById(id);  elem.parentNode.removeChild(elem);}<form class="f0" action="action.php" id="f0">  <input type="text" name="name" id="name" required="">  <button onclick="duplicate('f0')">Duplicate</button>  <button onclick="remove('f0')">Remove</button>  <input type="submit" value="Next"/></form>
查看完整描述

1 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

你根本不需要ids 。


最小變動是通過this進入remove從onclick(和,因為你不希望它提交表單,給它一個type):


<button onclick="remove(this)" type="button">Next</button>

然后,在 中remove,使用傳入的按鈕元素來查找它所在的表單:


function remove(button) {

    var form = button.closest("form");

    form.parentNode.removeChild(form);

}

您可以對以下內容進行類似更改duplicate:


function duplicate(button) {

    var form = button.closest("form").cloneNode(true);

    document.body.appendChild(form);

}

一定id要從表單中刪除,因為它不需要并且會被上面的重復。


現場示例:

function remove(button) {

    var form = button.closest("form");

    form.parentNode.removeChild(form);

}


function duplicate(button) {

    var form = button.closest("form").cloneNode(true);

    document.body.appendChild(form);

}

<form class="f0" action="action.php">

  <input type="text" name="name" id="name" required="">

  <button onclick="duplicate(this)" type="button">Duplicate</button>

  <button onclick="remove(this)" type="button">Next</button>

</form>

但更好的是根本不使用該onclick屬性,因為當您使用時,您必須使用全局函數,并且最好避免使用全局函數。改用現代事件處理 ( addEventListener):


function remove() {

    var form = this.closest("form");

    form.parentNode.removeChild(form);

}


function duplicate() {

    var form = this.closest("form").cloneNode(true);

    setupHandlers(form);

    document.body.appendChild(form);

}


function setupHandlers(form) {

    form.querySelector(".form-duplicate").addEventListener("click", duplicate);

    form.querySelector(".form-remove").addEventListener("click", remove);

}


// Setup handlers on any initially-present forms

document.querySelectorAll(".f0").forEach(setupHandlers);

<form class="f0" action="action.php">

  <input type="text" name="name" id="name" required="">

  <button class="form-duplicate" type="button">Duplicate</button>

  <button class="form-remove" type="button">Next</button>

</form>

另一種選擇是使用事件委托,處理所有這些表單都在的容器元素上的點擊(body在您的示例中):


document.body.addEventListener("click", function(e) {

    var btn = e.target.closest(".form-duplicate");

    if (btn && this.contains(btn)) {

        duplicate(btn);

        return;

    }

    btn = e.target.closest(".form-remove");

    if (btn && this.contains(btn)) {

        remove(btn);

        return;

    }

});


function remove(btn) {

    var form = btn.closest("form");

    form.parentNode.removeChild(form);

}


function duplicate(btn) {

    var form = btn.closest("form").cloneNode(true);

    document.body.appendChild(form);

}

<form class="f0" action="action.php">

  <input type="text" name="name" id="name" required="">

  <button class="form-duplicate" type="button">Duplicate</button>

  <button class="form-remove" type="button">Next</button>

</form>

請注意,這closest是相對較新的,您需要一個用于 IE 的 polyfill。


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號