【问题标题】:jQuery toggle() not always firingjQuery toggle() 并不总是触发
【发布时间】:2016-01-08 16:17:56
【问题描述】:

我一直在制作一些基本的移动导航,并且正在使用点击事件来显示/隐藏菜单。

简化的代码示例:

        jQuery('.menu-button').click(function(){
            jQuery('.header-nav').toggle();
            console.log('clicked');
        });

我一直在移动设备上进行远程调试,并且 console.log 始终有效,但 .header-nav toggle() 似乎随机不触发 - 我无法发现它的模式,但它始终保留在 DOM 中(它应该),所以它以某种方式被移除并不是它不发射的原因。

有什么想法吗?

【问题讨论】:

  • 究竟如何保留在 DOM 中,toggle 没有删除任何东西,它只是隐藏了它?
  • 对不起 - 我的意思是它留在 DOM 中(它应该),所以它以某种方式被移除并不是它没有触发的原因。
  • 使用 ontouch 事件而不是点击事件。 stackoverflow.com/questions/9122679/…
  • 很可能点击事件有时会被触发两次,或者其他东西正在切换元素。
  • Kevin B - 实际上似乎确实如此 - 计算 console.log 的 - 知道为什么会这样吗?

标签: javascript jquery


【解决方案1】:

感谢 Kevin B 的评论,似乎 click 事件触发了多次。为了解决这个问题,使用了以下内容:

$(element).off().on('click', function() {
    // function body
});

参考:jQuery click events firing multiple times

【讨论】:

  • 或...您可以将点击事件从它所在的任何事件处理程序内部移动到其他地方。显然你不需要重新绑定它。
  • 我认为这不一定是我很好的解决方案。理想情况下,您会找到“额外”点击的根本原因。祝你好运! :)
  • 这是“暂时有效”的修复之一 - 将尝试进一步调查。这很奇怪,因为它是一个在 document.ready 和 window.resize 中调用的非常简单的函数。
  • 您需要在移动设备上触发 onclick 时处理 300 毫秒的延迟(主要发生在 android 智能手机中)。
  • 我认为这可能是罪魁祸首,因为移动设备上不存在同样的问题。 Fastclick.js 似乎是解决此问题的最简单方法,但删除此 Android“功能”似乎需要大量代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
相关资源
最近更新 更多