javascript - 重用功能删除项目

标签 javascript html dom

我想制作一个添加和删除项目的按钮。 单击“删除表单”按钮后,该按钮将更改为“添加表单”。 但是在删除并添加表单后,我想再次删除表单,但由于我不明白的原因,它没有发生。

我使用的是最新版本的 Chrome 浏览器。

<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>

    <title>Task 1</title>
</head>
<body style="height: 100%">
    <div class="container h-100">
        <div class="row h-100 justify-content-center align-content-center">
            <div class=""><button type="button" class="btn btn-primary">Open Google</button></div>
            <div class=""><button type="button" class="btn btn-danger" id="danger">Delete form</button></div>
            <div class="breaker w-100" style="height:10%;"></div>
            <form id="form"> 
                <div class="form-group">
                    <label for="formGroupExampleInput">Example label</label>
                    <input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
                </div>
                <div class="form-group">
                    <label for="formGroupExampleInput2">Another label</label>
                    <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
                </div>
            </form>
        </div>
    </div>  
    <script src="./index.js"></script>
</body>
</html>
document.getElementsByClassName('btn-primary')[0].addEventListener("click", open_google);
document.getElementsByClassName('btn-danger')[0].addEventListener("click", delete_function);

let inner_form = document.getElementById('form').innerHTML;

function open_google() {
    window.open('http://google.com', '_blank');
}

let buttons;

function button_change(button) {
    switch(button) {
        case "success":
            buttons = document.getElementsByClassName('btn');
            buttons[1].innerHTML = 'Add form';
            buttons[1].className = 'btn btn-success';
            document.getElementsByClassName('btn-success')[0].addEventListener("click", add_function);
            break;
        case "danger":
            buttons = document.getElementsByClassName('btn');
            buttons[1].innerHTML = 'Delete form';
            buttons[1].className = 'btn btn-danger';
            break;
        default:
            break;
    }
}

function delete_function() {
    let element = document.getElementById('form');
    while (element.firstChild) {
      element.removeChild(element.firstChild);
    }
    button_change("success");
}

function add_function() {
    document.getElementById('form').innerHTML = inner_form;
    button_change("danger");
}

示例代码:https://codepen.io/anon/pen/xNjPYj

最佳答案

事件监听器不会被删除,因此两个函数都会被调用(可能多次),具体取决于单击按钮的次数。

就我个人而言,我认为创建两个按钮会更容易,每个按钮都有独立的单击处理程序,并根据单击的按钮隐藏/显示它们。

但是,要解决代码中的当前问题,您需要使用 removeEventListener() 删除以前的事件监听器。在附加新的之前。

关于javascript - 重用功能删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309945/

相关文章:

javascript - 设置动画谷歌地图标记

javascript - Typescript 接口(interface)根据逻辑设置值

HTML 5 导航菜单

jquery - 如何从 View 中调用 codeigniter Controller 方法

javascript - 如何使用 jQuery 迭代 id 名称的变体(例如 idname1、idname2)

html - 设置包装器样式但不将样式传播到子元素的最聪明的方法是什么?

javascript - 有希望的 meteor

javascript - 如何向水平滚动条添加或删除类?

javascript - 我可以在 DOM addEventListener 中使用 Angular2 服务吗?

javascript - react : setting state based on local storage