У меня есть фрагмент кода, который создает ховеркарту (поле с дополнительной информацией) на сайте социальной сети, когда пользователь наводит указатель мыши на гиперссылку с именем пользователя:
$(function() {
$('body').on('mouseenter', 'a', function(){
$(this).attr('data-value', '10');
let username = $(this).attr('href');
$.post("includes/handlers/hovercard.php", {username:username}, function(data){
if(data === "yes")
$('a[data-value=10]').wrap("<div class='hov' style='display:inline-block;'></div>");
else
$('a[data-value=10]').removeAttr('data-value');
});
$.post("includes/handlers/hovercard_response.php", {username:username}, function(response){
$('.hov').append('<span></span>');
$(".hov span").html(response);
$('.hov').each(function(){
$(this).on('mouseover', 'a', function(){
return false;
});
});
//...and then some buttons, links and etc are displayed...
}).on('mouseleave', 'a', function(){
$('a[data-value=10]').removeAttr('data-value');
});
});
Первый ответ ajax проверяет, находится ли пользователь над ссылкой, содержащей имя пользователя, и, если да, отправляет «да» в качестве ответа.Если это ссылка с именем пользователя, то второй вызов применяет ховеркарту ко всем другим вещам, которые должны отображаться (я оставил этот бит, чтобы не загромождать сообщение, поскольку оно не имеет отношения к проблеме).
Этовсе работает отлично.Единственная проблема заключается в том, что иногда, если вы наводите курсор мыши на пользователя A, а затем на пользователей B, C и D, он не отображает информацию для A, B, C и D, а A, A, A, A. Другими словами, он застревает и отображает информацию только для одного пользователя, как будто вы продолжаете парить над одной и той же ссылкой снова и снова.
Я проверил консоль и увидел, что когдаэто происходит, он не отправляет запросы AJAX вообще.Таким образом, вместо отправки запроса на B, он ничего не отправляет, а просто продолжает отображать A.Если я начну немного прокручивать страницу или обновлять, проблема исчезнет, и все снова будет нормально.Это происходит как в Chrome, так и в Firefox.
Сначала я подумал, что это может быть проблема с кэшированием, поэтому я добавил $ajaxSetup({ cache:false })
в самый верх, но это не помогло.
Любая помощь очень ценится ...