如何在嵌套悬停事件中正确销毁JavaScript计时器对象?

史黛西·施伦克(Stacey Schlenker)

我在从悬停事件中正确清除计时器功能时遇到困难。我有两个div。他们是兄弟姐妹,下一个兄弟姐妹应该显示在另一个兄弟姐妹的悬停上。我无法确定自己在哪里搞砸,但是我发现,每次我将鼠标悬停在主项目上时,它都会使用setTimeout创建一个全新的计时器。因此,第一次迭代工作正常,第二次悬停将触发两次,依此类推。

    .main-item {
      width: 300px;
      height: 100px;
      background: #000;
    }

    .sub-item {
      display: none;
      width:450px;
      height: 75px;
      background: red;

      &.open {
        display: block;
      }

    }



    <div>
      <div class="main-item">
      </div>
      <div class="sub-item"></div>
    </div>

    var timer;

    $('.main-item').hover(function() {
      var $this = $(this);
      var $sub = $this.next();

      $sub.addClass('open');

}, function() {
  var $this = $(this);
  var $sub = $this.next();

  $sub.hover(function() {
    var $this = $(this);
    clearTimeout($this.data('timerId'));
    timer = null;

    console.log(timer);

  }, function() {
    var $this = $(this);
    timer = setTimeout(function() {
      $this.removeClass('open');
      alert('this triggered');
    }, 2000);
    $this.data('timerId', timer);
  });

});
关颖

问题不是计时器,而是绑定事件处理程序。每次将鼠标移开时,.main-item都将悬停处理程序绑定到.sub-item您或者需要删除先前的处理程序,或者设置一个布尔值以记住您已绑定了悬停处理程序,或者将jquery函数onemouseentermouseoff事件一起使用,有很多方法可以解决此问题。

使用$sub.off()删除以前的处理程序。

https://jsfiddle.net/p2wtonac/2/

使用布尔值绑定一次。

https://jsfiddle.net/p2wtonac/3/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在react js中正确重置计时器

来自分类Dev

如何在asp.net中正确减少Ajax计时器?

来自分类Dev

如何在React功能组件中正确设置setInterval计时器?

来自分类Dev

如何在JavaScript中正确读取对象

来自分类Dev

如何在计时器中获取我的对象的实例

来自分类常见问题

如何在JavaScript中创建准确的计时器?

来自分类Dev

如何在JINT Javascript端创建计时器

来自分类Dev

如何在JavaScript中暂停和恢复计时器?

来自分类Dev

如何在javascript / jquery中重置计时器?

来自分类Dev

如何在 Javascript 中制作毫秒计时器?

来自分类Dev

如何在javascript中停止计时器?

来自分类Dev

如何正确停止计时器

来自分类Dev

带有对象的 Javascript 计时器

来自分类Dev

计时器事件显示的表单无法正确呈现

来自分类Dev

如何使该计时器正确倒计时?

来自分类Dev

如何使计时器的JavaScript变量动态

来自分类Dev

如何修复此Javascript计时器

来自分类Dev

计时器 - javascript

来自分类Dev

如何在计时器刻度事件上使用TimeSpan显示秒

来自分类Dev

如何在计时器刻度事件上使用TimeSpan显示秒

来自分类Dev

如何在线程中使用计时器经过的事件

来自分类Dev

如何在Javascript对象中正确定义(函数||函数)?

来自分类Dev

使用onclick事件停止javascript倒数计时器

来自分类Dev

javascript倒数计时器,点击事件后间隔加快

来自分类Dev

全局静态对象销毁后,是否可以调用OS计时器回调?

来自分类Dev

如何在JavaScript中使用服务器端倒数计时器?

来自分类Dev

Javascript-如何在计时器达到 0 时重置按钮计数器

来自分类Dev

对象内部的计时器

来自分类Dev

计时器不会在 CollectionView 中正确更新 Swift

Related 相关文章

热门标签

归档