1

有人可以在我的代码中指出我需要什么来阻止它在超链接标签上鼠标输入时加倍数据。我在 isLoading 中放了一个标志,但它仍然继续加倍。我可能做错了,有人可以查看我的代码并查看它有什么问题 - 看看你是否可以防止它在 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);
4

2 回答 2

2

'mouseenter click'表示该操作在 mouseenter 处执行一次,如果单击则再次执行。

于 2013-04-18T08:43:58.173 回答
1

尝试isLoading = true;在 ajax 调用之前而不是在beforesend函数中设置。而且您还想isLoading = false在 ajax 调用完成而不是 mouseleave 时重置。根据您是否出于键盘导航原因这样做,您也可以完全停止收听点击事件。

于 2013-04-18T08:56:24.950 回答