有人可以在我的代码中指出我需要什么来阻止它在mouseenter上超链接标记时加倍数据。我在那里加了一个标志,但仍然继续加倍。我可能做错了可能有人看了我的代码并看到它有什么问题 - 看看你是否可以防止它在mouseenter上发布。请告诉我你的变化 - 感谢KDM。
(function($){
$.fn.rating_display = function() {
var _this = this;
var id = $(_this).data('id');
var position = $(this).parent().position();
var left = position.left - 15;
var top = position.top + $(this).height() + 13;
var isLoading = false;
function clear_ratings() {
$('.ratings-content').html("");
}
$(document).on('click', function(e) {
var element = e.target;
/*else if($(element).closest('.rating').length){
$('.ratings-display').show();
}*/
});
// here is where I'm having trouble with double posting
$(this).on('mouseenter click', function(e) {
if(isLoading == true) return false;
$.ajax({
type:'POST',
dataType:"html",
data:{product_id:id},
url:"../../webservices/get_rating.php",
beforeSend: function() {
clear_ratings();
$('.ratings-display').show().css({'left':left + 'px', 'top':top + 'px'});
isLoading = true;
},
success: function(data) {
$('.ratings-content').append(data);
}, error:function(data, status, xhr) {
clear_ratings();
$('.ratings-content').html(data + "\r\n" + status + "\r\n" + xhr);
}
});
}).on('mouseleave', function(e) {
var target = e.relatedTarget;
if($(target).closest('.ratings-display').length) {
return false;
}else{
$('.ratings-display').hide();
clear_ratings();
isLoading = false;
}
});
$('.ratings-display').on('mouseleave',function (e) {
var target = e.relatedTarget;
if($(target).closest('.rating').length) return false;
if(!$(target).closest('.ratings-display').length) {
$('.ratings-display').hide();
clear_ratings();isLoading = false;
}
});
}
})(jQuery);
答案 0 :(得分:2)
'mouseenter click'
表示操作在mouseenter执行一次,如果单击则再次执行。
答案 1 :(得分:1)
尝试在ajax调用之前设置isLoading = true;
而不是beforesend
函数。并且您还希望在ajax调用完成时重置isLoading = false
而不是在mouseleave上重置{{1}}。根据您是否因键盘导航原因而执行此操作,您还可以完全停止收听点击事件。