javascript - 有人可以向我解释一下为什么我会出现堆栈溢出吗?

标签 javascript jquery

Updated ( Fixed ) Fiddle Here

Uncaught RangeError: Maximum call stack size exceeded

这是一个简单的自定义标题,当鼠标悬停在元素上时显示。几次显示后它就中断了。

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();
}

最佳答案

每次鼠标移到元素上时,您都会重新绑定(bind) 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 中淡入相应的消息一次,并同时设置其文本;不是每次鼠标移动时。

关于javascript - 有人可以向我解释一下为什么我会出现堆栈溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072387/

相关文章:

javascript - 单击一个按钮然后显示选定的值

javascript - 当我们离开文本框时捕获事件

javascript - 如何匹配文本以及网页中文本的格式

jquery - 在移动设备上禁用 Bootstrap 日期选择器的键盘弹出窗口(Rails 4、Jquery)

javascript - 访问父div之外的div

javascript - jQuery 点击事件为空

javascript - 创建多个进度圈 d3.js

javascript - JS事件监听器(性能)

javascript - 如何在 1 小时 3 分钟内将功能时间和日期转换为类似内容

javascript - 使用 append 添加内容 - Jquery