防止多次点击提交多个ajax

Avi*_*mar 4 javascript ajax wordpress jquery

我有一个WordPress博客运行这个jQuery代码,允许用户点击书签链接,将帖子保存为书签.每个帖子都显示一个总书签计数器,如下所示:"Bookmarked(5)".虽然此代码有效,但只要有人在书签链接上多次单击,就会记录多次单击,然后将相同的帖子保存为多个书签.当用户通过再次单击书签链接尝试删除书签时,它再次注册多次点击,计数器开始显示负数,如下所示:"已加书签(-5)".

我一直在寻找关于如何防止这种情况发生的指令,以便书签计数器永远不会减去并且用户不能多次为同一个帖子添加书签但到目前为止没有成功.

这是我正在使用的jQuery代码:

jQuery(document).ready( function($) {

var added_message = upb_vars.added_message;
var delete_message = upb_vars.delete_message

$(document).on('click', '.upb_add_bookmark', function () {

    var post_id = $(this).attr('rel');
    var data = {
        action: 'bookmark_post',
        post_read: post_id
    };
    $.post(upb_vars.ajaxurl, data, function(response) {

        $('.upb_bookmark_control_'+post_id).toggle();
        if($('.upb-bookmarks-list').length > 0 ) {
            var bookmark_data = {
                action: 'insert_bookmark',
                post_id: post_id
            };
            $.post(upb_vars.ajaxurl, bookmark_data, function(bookmark) {
                $(bookmark).appendTo('.upb-bookmarks-list');
                $('.no-bookmarks').fadeOut();
            });
        }
    });
    return false;
});

$(document).on('click', '.upb_del_bookmark', function () {

        var post_id = $(this).attr('rel');
        var data = {
            action: 'del_bookmark',
            del_post_id: post_id
        };
        $.post(upb_vars.ajaxurl, data, function(response) {
            $('.bookmark-'+post_id).fadeOut();
            $('.upb_bookmark_control_'+post_id).toggle();
        });

    return false;
});
});
Run Code Online (Sandbox Code Playgroud)

你能帮我解决一下这个问题吗?

非常感谢!

par*_*ent 5

一种方法是在.disabled之前向链接添加一个类$.post().

// Before ajax...
if ($(this).hasClass('disabled')) {
    return false;
} else {
    $(this).addClass('disabled');
}
// Make sure we refer to the same element
var that = this;

// On post success...
$(that).removeClass('disabled');
Run Code Online (Sandbox Code Playgroud)