如何删除所有附加到 HTML 元素的事件

Posted

技术标签:

【中文标题】如何删除所有附加到 HTML 元素的事件【英文标题】:How to remove all the attached events to an HTML element 【发布时间】:2014-06-20 15:50:35 【问题描述】:

我想知道如何将所有附加的事件删除到 jQuery 中的 html 元素。我们假设我们有以下指令:

$('<div class="notification" style="bottom:'+ind+'px">Message envoyé '+i+'<span class="close">x</span></div>').fadeIn(1000,"linear").delay(5000).fadeOut(3000,"linear");

如何在不使用 on()、bind()....等的情况下删除附加到 html 事件的fadeIn、delay 和fadeOut 事件??...实际上我尝试使用.off(), .unbind()、.die()、.undelegate() 但它不起作用。有人有想法吗?

提前致谢。

【问题讨论】:

那些不是事件,那些是 jQuery 函数。事件是点击、鼠标悬停、按键等。 这些不是事件:它们是排队函数。也许dequeue 可以解决问题? api.jquery.com/dequeue 这不太可能,因为您需要在调用 fadeIn 之前中断控制流。 那些不是事件,它们被添加到动画队列中。那么.stop()呢? api.jquery.com/stop @ajm:我尝试了 dequeue() 方法,但是当我将鼠标悬停在 div 上时会直接淡出,我真正想要的是当我将鼠标悬停在 div 上时根本不会出现淡出。你知道怎么做吗?? 【参考方案1】:

我猜你想在悬停内停止动画...我没有你的 html 和 css,但我创建了一个 JSBIN。很抱歉,我正在设置我的开发环境。

// where msgEl is the new element you create
msgEl 
  .hover(function()
    tmpl.stop(1,1).fadeIn(1);
  ,function()
    tmpl.stop(1,1).fadeIn(1);
  )
  .hide(0)
  .fadeIn(1000,"linear")
  .delay(5000)
  .fadeOut(3000,"linear");

JSBIN

【讨论】:

我试过了,但是当我将鼠标悬停在 div 上时它会直接消失,我真正想要的是当我将鼠标悬停在 div 上时不会出现淡出。 好的,我把它改成悬停行为,抱歉一开始不清楚:) 事实上,这是我的完整代码:link...我应该在下面的行中添加什么以使其正常工作??:var a = $('消息特使'+i+'x ').fadeIn(1000,"linear").delay (5000).fadeOut(3000,"linear").hover(function(),function());提前致谢。 没错,只需在第一个悬停回调中添加$(this).stop(1,1).fadein(1)。这会停止悬停动画并强制它淡入...

以上是关于如何删除所有附加到 HTML 元素的事件的主要内容,如果未能解决你的问题,请参考以下文章

如何删除“按钮”的“单击”事件的所有事件处理程序?

如何在不附加到 DOM 的情况下正确删除 html5 音频?

如何删除事件处理程序并将其重新附加到 c# 中的控件?

我们如何找到附加到 DOM 元素的所有事件

(JS 事件委托)如何删除目标元素?

如何删除某些元素的所有事件侦听器而不使用其子元素