Tengo un blog de WordPress que ejecuta este código jQuery que permite a los usuarios hacer clic en un enlace de marcador que guarda la publicación como marcador. Cada publicación muestra un contador total de marcadores que se parece a: “Marcados (5)”. Aunque este código funciona, registra varios clics cada vez que alguien hace clic varias veces en el enlace del marcador y luego guarda la misma publicación como varios marcadores. Cuando el usuario intenta eliminar el marcador haciendo clic en el enlace del marcador nuevamente, registra múltiples clics nuevamente y el contador comienza a mostrar números negativos que se ven como: “Marcado (-5)”.
He estado buscando instrucciones sobre cómo evitar que esto suceda para que el contador de marcadores nunca se ejecute en menos y el usuario no pueda marcar la misma publicación varias veces, pero hasta ahora no ha tenido éxito.
Aquí está el código jQuery que estoy usando:
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;
});
});
¿Podría por favor ayudarme a resolver este problema?
¡Muchas gracias!
pergamino
Una forma es agregar un .disabled
clase a su enlace antes de la $.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');
-
¡Gracias, pergamino, por proporcionar esta solución! Este código funciona a la perfección con su ayuda, pero de alguna manera no encuentro el comportamiento actual muy fácil de usar. Actualmente, después de aplicar su solución, le permite al usuario hacer clic una vez para agregar el marcador y hacer clic nuevamente para eliminarlo, pero después de eso, el tercer clic hace que la página salte a la parte superior, lo que confundirá a muchos usuarios. ¿Podría ayudarme para que pueda permitir que los usuarios agreguen o eliminen el marcador tantas veces como quieran sin hacer que sus clics salten al tercer clic y aún así poder evitar múltiples publicaciones de ajax? ¡Gracias!
–Avinash Kumar
4 oct 2014 a las 15:23
-
@AvinashSingh Probablemente deberías reemplazar el
return
allí conreturn false
. Sin embargo, esto significa que existe una condición en la que el.disabled
la clase no se elimina. Creo que probablemente necesites agregar unelse { $(that).removeClass... }
haciaif ($(..).length > ..)
declaración dentro de su primera$.post()
.– pergamino
4 oct 2014 a las 15:38
-
¡Muchas gracias, pergamino! ¡Eres un salvavidas!
–Avinash Kumar
04/10/2014 a las 17:34