6

最新的 chrome 版本“43.0.2357.65 m”是否为其他人破坏了 JQueryMobile 1.3.2?当我现在单击一个弹出窗口时,它会转到页面顶部并且滚动条消失。在以前的版本中很好。

该问题正在影响我的应用程序,但可以在 JQueryMobile 演示页面上重现:

  1. 使用 Chrome 43.0.2357.65 m 访问http://demos.jquerymobile.com/1.3.2/
  2. 点击弹出
  3. 在弹出页面上,单击页面中间的“登录”按钮。
  4. 它将转到页面顶部,滚动条将消失。

请注意,这并非每次都会发生 - 如果您再次尝试它可能会起作用,但如果您从新选项卡开始这些步骤,它似乎确实会始终如一地发生。

我提出了一个关于 Chrome 的问题,但只是想知道是否有人知道发生了什么,以及是否有我可以实施的解决方法。

谢谢!

4

2 回答 2

10

弹出窗口似乎很奇怪,很难复制 - 转到下面的确切链接,然后单击所述“登录”按钮似乎可以保证行为。 http://demos.jquerymobile.com/1.3.2/widgets/popup/#&ui-state=dialog

我相信下面的解决方案可能与它解决了幻灯片转换的其他有趣问题有关。(仅通过弹出窗口进行有限测试)但看起来很有希望

用下面的代码片段覆盖有问题的函数。 您必须在加载 jquerymobile js 之前调用它

// Override of $.fn.animationComplete muse be called before initialise jquery mobile js
   $(document).bind('mobileinit', function() {
     $.fn.animationComplete = function(callback) {
       if ($.support.cssTransitions) {
         var superfy= "WebKitTransitionEvent" in window ? "webkitAnimationEnd" : "animationend";
         return $(this).one(superfy, callback);
       } else {

         setTimeout(callback, 0);
         return $(this);
       }
     };

   })

背景: jqueryMobile 1.3.2 实现了 jquery one() 事件处理程序附件有些不正确。

.one() - “将处理程序附加到元素的事件。每个事件类型每个元素最多执行一次处理程序。 ”:http ://api.jquery.com/category/events/ :本质上是事件触发和然后被删除。

但是,使用one()调用两者(“webkitAnimationEnd 和 animationend”) 可能意味着两个处理程序中只有 1 个(取决于浏览器)被触发,而另一个处理程序太逗留并可能导致内存泄漏。

Chrome43 同时处理 webkitAniationEnd 和 animationend - 但是在任何给定时间只有一个。这使得另一个在元素上的下一次动画发生时逗留并触发。

于 2015-05-27T15:30:05.053 回答
0

作为我的一种解决方法,如果您使用 jQueryMobile API,它似乎可以工作。

$('selector').popup('open');

而不是依赖 jQueryMobile 标记

我的 Chrome 版本是“43.0.2357.81 m”,我也遇到了这个问题

于 2015-05-26T17:17:15.363 回答