单击的按钮仅在需要为每个项目执行一次时执行其功能

Button clicked does its function only once when it needs to do it for each item

如果这个问题很简单,我先道歉,我知道我几乎得到了答案,但我只是 运行 不知道如何去做。我将 link 留给故障项目(将其复制粘贴到那里),以便您可以更好地了解我想做什么。

这是 link:https://glitch.com/edit/#!/skitter-aftermath?path=index.html:9:7

基本上,“添加待办事项”按钮确实会显示 "Added todo item!" 通知,但它会在每隔一秒添加的项目上显示(我在 .toggle 上有它,因为我找不到 .add 的解决方案& .remove 两者都起作用),而删除待办事项按钮仅在删除一个待办事项时显示其通知,在它不显示的所有其他已删除项目上。提前致谢!

P.S。这是上面 link 中引用通知的代码部分:

//Show an added notice when clicked Add Todo
    createAddedNotice:function(){
        var itemAdded = document.getElementById("added");
        itemAdded.classList.toggle("addedShow");
    },
    //Show completed notice when the list item is toggled as completed
    createCompletedNotice: function(){
        var itemCompleted = document.getElementById("completed");
        itemCompleted.classList.toggle("finished");
    },
    //Show deleted notice when the list item is deleted
    createDeletedNotice: function(){
        var itemDeleted = document.getElementById("deleted");
        itemDeleted.classList.add("deletedShow");
    },
    //Show toggled all notice when all list items are toggled by pressing TOGGLE ALL button
    createToggledAllNotice:function(){
        var allCompleted = document.getElementById("allCompleted");
        allCompleted.classList.toggle("allCompletedShow")
    },
    //Show deleted all notice when all list items are toggled by pressing DELETE ALL button
    createDeletedAllNotice: function(){
        var allDeleted = document.getElementById("allDeleted");
        allDeleted.classList.toggle("allDeletedShow");
    },
    //
    setUpEventListeners: function(){
        var todosUl = document.querySelector("ul");
        todosUl.addEventListener("click", function(event){
            var elementClicked = event.target;
            if(elementClicked.className === "deleteBtn"){
                handlers.deleteTodo(parseInt(elementClicked.parentNode.id));
            }
            //If the delete button is clicked, show the deleted notice
            if(elementClicked.className === "deleteBtn"){
                view.createDeletedNotice();
            }
            if (elementClicked.className === "toggleBtn") {
                todoList.toggleCompleted(parseInt(elementClicked.parentNode.id));
                var itemCompleted = document.getElementById("completed");
                itemCompleted.classList.remove("finished");
                view.displayTodos();
            }
            //If the completed button is clicked then show the completed notice
            if( elementClicked.className === "toggleBtn"){
                view.createCompletedNotice();
            }

            //If addTodo button is clicked, then remove the class (?)
    });

这是 CSS 动画的问题,您基本上需要重新触发动画,您可以通过删除 class 然后添加它来实现。但这不起作用,除非你在两者之间睡一觉。

但是有一个技巧,你可以通过询问元素的 offsetWidth 来引起文档重排。

下面是一个例子。

createAddedNotice:function(){
    var itemAdded = document.getElementById("added");
    itemAdded.classList.remove("addedShow");
    itemAdded.offsetWidth; //document reflow
    itemAdded.classList.add("addedShow"); 
},

ps。每次尝试切换都有效的原因是因为第一次切换会继续,下一次关闭,然后再次打开导致动画重新启动..