javascript - 仅当数组包含奇数个项目时,删除动态填充的 <li> 才有效

标签 javascript jquery event-delegation

项目实例:http://jsfiddle.net/k3buckuc/

enterItem = []
itemNumber = 0

// mark item as checked and add delete functionality 
function check() {
    $('#itemsListed').on('click', 'li', function() {    
        $(this).toggleClass('checked');
        $(this).append('<hr />');
        $(this).append('<button class="trash">X</button>');
        $(this).not('.checked').find('hr').remove();
        $(this).not('.checked').find('button').remove();
        // enable trash or delete functionality individual list items
        $('.trash').on('click', function() {
            $(this).closest('li').remove();
        });
    });
}

仅当 itemNumber 为奇数或 EnterItem 包含奇数个项目时才能正确执行

查看 fiddle 来检查我如何将项目插入数组以及我的增量技术

最佳答案

那是因为您一遍又一遍地绑定(bind)相同的事件。每次添加项目时,都会为单击事件绑定(bind)另一个处理程序。

当您添加偶数个项目时,也会添加偶数个事件处理程序。当您单击某个项目时,第二个处理程序将撤消第一个处理程序所做的操作。

例如,当您有十个项目时,事件处理程序将被调用十次。由于最终结果与事件处理程序被调用零次相同,因此看起来什么也没有发生。

只需绑定(bind)事件处理程序一次,而不是每次添加项目时都绑定(bind)。

关于javascript - 仅当数组包含奇数个项目时,删除动态填充的 <li> 才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477025/

相关文章:

javascript - 更改 <select> onclick 的内容

带 URL 的 Javascript 模态弹出窗口

javascript - 如何创建jQuery元素缓存机制?

javascript - jstree 性能问题

javascript - 事件委托(delegate)和循环遍历 if 语句中的元素

javascript - Jquery在追加和上传后隐藏和删除图像

javascript - 在单独的路由中使用 useRef 响应滚动导航

javascript - 如何在单个html文件中添加多个页面

javascript - 如何为水平滚动列表设置滚动条样式?

jquery - 使用处理程序删除元素时的最佳实践是什么?