未捕获RangeError:超出最大调用堆栈大小
这是一个简单的自定义标题,在鼠标悬停在元素上时显示。几次展示后它就会中断。
function showtitle(title) {
$('.button').bind('mousemove', function(e){
$('.message').fadeIn(600);
var message = $('.message').css({
'position' : 'absolute',
'left' : e.pageX,
'top' : e.pageY + 25
});
var print = title;
$('.message').html('<span>' + print + '</span>');
});
}
function hidetitle() {
$('.message').hide();
}
答案 0 :(得分:5)
每次鼠标在元素上移动时,您都会重新绑定mousemove
事件,但永远不会将其取消。
function moveHandler(e) {
$('.message').fadeIn(600);
var message = $('.message').css({
position: 'absolute',
left: e.pageX,
top: e.pageY + 25
});
$('.message').empty().append($('<span>', {text: title}));
}
function showtitle(title) {
$('.button').bind('mousemove', moveHandler);
}
function hidetitle() {
$('.message').hide();
$('.button').unbind('mousemove', moveHandler);
}
您还可以始终保持mousemove
事件,并使用CSS的:hover
来显示和隐藏工具提示。
我猜这不是因为浏览器的事件循环,而是因为jQuery处理事件或jQuery的动画排队。您还应该在showtitle
中淡出适当的消息一次,并同时设置其文本;不是每次鼠标移动。
答案 1 :(得分:0)
这可能是因为您将mousemove绑定到匿名函数。每次该事件触发时,都会再次创建该功能。尝试在将函数绑定到事件之前定义函数。