jquery - 在 iphone safari 上滑动会导致切换到火灾 bug

标签 jquery iphone debugging safari slide

关于http://inigo.nu (临时项目)

我使用单击 div 来切换显示菜单 ul 使用

html:

<div id="toggle-menu" class="hover">menu</div>

jQuery:

jQuery(document).ready(function(jQuery) {
    jQuery('#toggle-menu').on('click', function() {
        jQuery('nav ul').toggle('slow');
    });
});

仅在iPhone safari上出现奇怪的错误。

点击打开菜单后滑动会使刚刚打开的菜单再次消失。 是什么导致了这种奇怪的行为以及如何解决它?

遗憾的是这篇文章:Safari Browser (iPhone Simulator): How to see/monitor all events being triggered?从未得到答复。因为我喜欢看到触发的事件。

我通过 console.log 编辑了幻灯片事件,但这并没有清除我的情况。

所以我的附带问题是如何最好地调试这样的问题。

我在 Safari 桌面上安装了开发者并且没有 js 错误。 在幻灯片显示上,将内联设置为 none,就像 onclick 一样。 不存在填充或覆盖问题。

如有任何帮助,我们将不胜感激。

最佳答案

我在为我的客户解决同样的问题时发现了你的问题。客户端有一个移动导航,当单击“切换图标”时会显示该导航。最初脚本使用 .toggle().... 是的,从 jQuery 1.9 开始,这是一个已弃用的函数(客户端使用的是 1.7.2 并且无法切换它),但我使用toggle/slideToggle 复制了您所描述的确切问题.

我将详细解释我的解决方案并标记您可能想要跳过的部分。

我使用的脚本

我正在编辑来解决此问题的脚本是用于导航的。它执行“切换”事件来显示导航区域并检查浏览器是否处于移动宽度(如果不是,则隐藏所有移动元素)。

尝试的解决方案/采取的步骤

我最初尝试从toggle()切换到slideToggle(),只是为了看看会发生什么。毫不奇怪,问题是一样的。

然后,我通过切换相关元素上的显示类来切换到更优化的方法。这看起来工作正常,但最终导致了同样的问题:当你在 iPad 上滚动时,类会自行恢复。

解决方案

这对我来说很有趣,因为我的脚本是一个点击事件,但它是在滚动时触发的。

正如我上面提到的,有一个调整大小功能,当浏览器到达移动断点之上时,该功能应该重新隐藏内容。在我看来,原来的调整大小功能确实不是最理想的,所以我只是凭直觉选择更新它。

$(window).resize(function() {
    if( $(window).width > 700 ) {
        $(".visible").removeClass("visible");
    }
});

$(window).resize(function() {
    if ( $(window).matchMedia('(min-width: 788px)').matches ) {
        $(".visible").removeClass("visible");
    }
});

事实证明,使用 matchMedia 正是我一直以来所需要的。不过,我最终保留了类切换:)。

但是,天哪,什么会导致滚动时触发调整大小?根据 jQuery 团队的说法,这是 Safari/iOS 与 .resize() 相关的错误。注意:这不是 jQuery 错误,问题仅与该事件有关。

来源:http://bugs.jquery.com/ticket/14119

请注意,响应者在使用 POJO 事件监听器与 jQuery 等效项时表示问题已解决。他们提供的示例实际上并不涉及 matchMedia,但我认为我可以推断正在发生的事情:

我的理论

我认为 Safari 在滚动时错误地触发了 jQuery 的 .resize() 事件,这导致脚本在不应该触发的时候触发。我相信我的问题已通过匹配媒体解决,因为即使脚本重新启动,它也不会执行任何操作,因为 matchMedia 语句的计算结果为 false,而不是通过 $(window).width() 查看窗口宽度。

无论如何,我希望这对您或其他人有所帮助。

关于jquery - 在 iphone safari 上滑动会导致切换到火灾 bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31293761/

相关文章:

jquery - IE10 CSS3 动画速度不使用 jQuery 动态更新

javascript - 将州名添加到 d3.js 中的 map

javascript - 在 React Native 中单击按钮时显示 PickerIOS

ios - RxSwift - 如何按顺序链接可观察量

iphone - 当方向改变时在 UIWebView 中找到横向和纵向的图像位置

javascript - 带有 Material UI 自动完成功能的 React-final-form

javascript - 日期范围选择器两个日期相同

ios - cocoa touch : How To Change UIView's Border Color And Thickness?

eclipse - 调试 Eclipse 核心表达式

Flutter:不同的应用程序图标和应用程序名称取决于发布/生产版本或调试/开发版本?