javascript - 在具有相同类的情况下,单击事件仅触发一次

标签 javascript jquery html perl

我有一个通知系统,它将所有用户的通知生成到我的 html 中的一个表中,以及一堆如下所示的行:

<td class = "archive-button" data-notice_id = "<%= $notice->notice_id()%>">Archive</td>

然后我有一个 js 脚本,每次按下“存档按钮”时都会运行:

$(document).on('click', '.archive-button', function(){
    var notice_id = $(this).data('notice_id');
    var archiveaddress = '/user/notices/archivenotice/' + notice_id;
    var archived_notice = 'tr.notification-' + notice_id;

    $.post(archiveaddress, {notice_id: notice_id}).done(function(){
        $(archived_notice).css("background" , "#F2F2F2");
        $('#num-posts').html(parseInt($('#num-posts').html(), 10) -1);
    });
});

我的问题是:如何使每个按钮只能触发事件一次?每个类都与“归档按钮”相同,因此当我执行 .one('clicl') 时,它会禁用所有其他尚未单击的类。我可以从 perl 检索 notification_id 并在生成标签时将其插入到每个标签中,但我仍然无法在 js 脚本中引用它。

最佳答案

只需使用 data 属性,就像您用来存储 notice-id 一样,但现在作为标志:

$(document).on('click', '.archive-button', function() {
    if ($(this).data("clicked") !== true) {
        $(this).data("clicked", true);

        var notice_id = $(this).data('notice_id');
        var archiveaddress = '/user/notices/archivenotice/' + notice_id;
        var archived_notice = 'tr.notification-' + notice_id;

        $.post(archiveaddress, {notice_id: notice_id}).done(function() {
            $(archived_notice).css("background" , "#F2F2F2");
            $('#num-posts').html(parseInt($('#num-posts').html(), 10) -1);
        });
    }
});

注意:您应该使用真实按钮(inputa)而不是td标签作为一个按钮。

关于javascript - 在具有相同类的情况下,单击事件仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389256/

相关文章:

javascript - 我正在向 anchor 标记的前面添加一个图标,但是我想阻止它多次添加图标

html - 如何用纯css将三 Angular 形 "^"放在菜单栏下拉内容框的顶端?

javascript - 不用 Javascript 创建平滑的隐藏/显示动画

html - Bootstrap Toggle Button,如何改变大小(高度和体重)

javascript - 使用 JavaScript 计算 CSS 网格中的行高

javascript - 如何避免在调整窗口大小时 Logo 改变位置?

java - [GWT]是否可以在MouseOver 上选择menuItem?

javascript - 如何确保Else语句保留在同一个html页面上?

javascript - 保存后保持选中复选框

javascript - 非模态函数,警告出现在页面顶部的红色横幅中