gpt4 book ai didi

javascript - 让按钮单击事件处理程序触发多次

转载 作者:行者123 更新时间:2023-12-03 11:28:28 24 4
gpt4 key购买 nike

我有一定数量的行:

var goal_index = 2;

我有一个函数,它使用两个按钮创建一些行(默认 2 行):垃圾桶(删除行)、添加(添加另一行)。

        // Creating Goals
var goals_creating = function(){
var goals_area = $('.goalsArea'),
add_button = $('<span class="add_btn"></span>'),
trash_button = $('<span class="trash_btn"></span>');

goals_area.html('');

for(var i = 0, j = 1; i < goal_index; i++, j++ ){
goals_area.append(
'<div class="row" data-trashgoal = ' + i + '>' +
'<div class="col-lg-1">' +
'<span class="trash_btn" data-trashgoal = ' + i + '></span>' +
'</div>' +
'</div>'
);
}
// Last trash tag
var last_trash_btn = $('.trash_btn').last();
// Insert after last trash button
last_trash_btn.after(add_button);
};

在函数的最后一部分,我将按钮(添加)插入到最后一行。之后运行我的函数:

goals_creating();

运行后,我为两个按钮(添加)和(删除)创建了两个事件:

    $('.add_btn').on('click', function(){
goal_index++;
goals_creating();
});

$('.trash_btn').on('click', function(){
var goal_to_del = $(this).data('trashgoal');
$('.row[data-trashgoal="' + goal_to_del + '"]').remove();
goal_index--;
goals_creating();
});

但是,它们只能工作一次,之后按钮就保持非事件状态,并且无法工作。我该如何修复这个错误?谢谢

最佳答案

您必须使用事件委托(delegate)。事件在 DOM 中“冒泡”,而 jQuery 使利用这一点变得很容易:

$(document).on('click', '.add_btn', function() { /* as before */ });

$(document).on('click', '.trash_btn', function() { /* as before */ });

通过这样做,您是在说,“当‘click’事件到达 DOM 顶部,并且它来自与类‘add_btn’匹配的元素时,执行此操作。”因为您只在 DOM 顶部安装了一个处理程序,所以它不会消​​失,并且会从一开始就存在的元素以及后来添加的元素中捕获这些事件。

将为您设置 this 的值,就像在直接在元素上设置的事件处理程序中一样。

关于javascript - 让按钮单击事件处理程序触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com