jQuery 解除绑定事件

Posted

技术标签:

【中文标题】jQuery 解除绑定事件【英文标题】:jQuery unbind event 【发布时间】:2011-08-25 10:18:59 【问题描述】:

如果我编写 jQuery 代码如下;

$("input:checkbox").unbind("touchstart");

这里的touchstart 只会被 iPad 识别。 这会在不理解touchstart 的桌面浏览器上引起问题吗?我应该将这段代码放在 if (iPad) 块中

即使我在 JS 库中找不到任何对它的引用,jQuery 也是如何理解 "touchstart" 的。

【问题讨论】:

不会造成任何问题。 jQuery 使用一个特殊的事件库而不是浏览器提供的默认 DOM 实现。 所以你基本上是说错误不会出现,因为我使用的是 jQuery 语句......如果我有一些普通的 JS 代码,比如使用 document.addEventListenser("touchstart",Fn).. .在那种情况下,它会导致桌面浏览器出错?请确认.. 是的,这正是我要说的。这些事件是 jQuery 生成的,与实际的 DOM 事件无关。 不确定我们是否在同一页面上...但是即使使用带有“touchstart”的普通JS addEventListener 也不会抛出任何错误...您可以看到jsfiddle.net/dcgb7/3 【参考方案1】:

如果事件不受支持,您仍然可以取消绑定该事件。 jQuery 不理解 touchstart,至少不是你期望的那样。它只保存一个名为“touchstart”的处理程序列表,如果您调用 unbind,它将删除它们。如果浏览器不支持 touchstart,您将不会看到触发的事件。

请记住,不支持触摸事件是一回事,没有触摸设备是另一回事,最新的桌面浏览器确实支持触摸事件。

【讨论】:

所以你说我不需要将代码放在 if (iPad) 块中,因为它不会在某些桌面浏览器上给出任何错误(它只是无法理解) 没错。从某种意义上说,jQuery 并不关心您绑定或取消绑定的事件,该事件不会触发,其他一切都是一样的,没有错误。您可以绑定它们,可以获取它们,也可以取消绑定它们。我刚刚在 jquery.com 上用我不起眼的 Firefox 3.6 试了一下,它运行没有错误。绑定也没有错误。

以上是关于jQuery 解除绑定事件的主要内容,如果未能解决你的问题,请参考以下文章

jQuery;事件绑定

jquery事件重复绑定的快速解决方法

如何从 jQuery 中的“滚动”事件中取消绑定所有先前添加的事件? [复制]

有没有办法只解除非命名空间事件的绑定?

jquery事件绑定与事件委托

jquery事件绑定与事件委托