更新 chrome 版本 43.0.2357.65 m 后,JQueryMobile 1.3.2 中的弹出窗口失败
Popups fail in JQueryMobile 1.3.2 after update chrome version 43.0.2357.65 m
最新的 chrome 版本“43.0.2357.65 m”是否已为其他人损坏 JQueryMobile 1.3.2?当我现在单击弹出窗口时,它会转到页面顶部并且滚动条消失。上个版本没问题
该问题正在影响我的应用程序,但可以在 JQueryMobile 演示页面上重现:
- 使用 Chrome 43.0.2357.65 m 转到 http://demos.jquerymobile.com/1.3.2/
- 点击弹出窗口
- 在弹出页面上点击页面中间的 "Sign in" 按钮。
- 它将转到页面顶部,滚动条将消失。
请注意,这并非每次都会发生 - 如果您再次尝试,它可能会起作用,但如果您从一个新的选项卡开始这些步骤,它似乎会一直发生。
我已经提出了 Chrome 的问题,但只是想知道是否有人知道发生了什么,是否有我可以实施的解决方法。
谢谢!
作为我的解决方法,如果您使用 jQueryMobile API。
$('selector').popup('open');
而不是依赖 jQueryMobile 标记
我的 Chrome 版本是“43.0.2357.81 m”,我也遇到了这个问题
弹出窗口似乎很奇怪,很难复制 -
转到下面的确切 link,然后单击上述 "sign in" 按钮似乎可以保证该行为。
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);
}
};
})
背景:
jquery移动版 1.3.2 实现 jquery one() 事件处理程序附件有些不正确。
.one() - "Attach a handler to an event for the elements. The handler is executed at most once per element per event type." : http://api.jquery.com/category/events/ : 本质上是事件触发然后被删除。
但是使用 one() 同时调用 ("webkitAnimationEnd and animationend") 可能意味着只有 1 个(取决于浏览器)两个处理程序中的一个曾经被解雇,而另一个则停留太久,并可能导致内存泄漏。
Chrome43 处理 webkitAniationEnd 和 animationend - 但在任何给定时间只能处理一个。这会让另一个元素停留并在下次元素上出现动画时触发。
最新的 chrome 版本“43.0.2357.65 m”是否已为其他人损坏 JQueryMobile 1.3.2?当我现在单击弹出窗口时,它会转到页面顶部并且滚动条消失。上个版本没问题
该问题正在影响我的应用程序,但可以在 JQueryMobile 演示页面上重现:
- 使用 Chrome 43.0.2357.65 m 转到 http://demos.jquerymobile.com/1.3.2/
- 点击弹出窗口
- 在弹出页面上点击页面中间的 "Sign in" 按钮。
- 它将转到页面顶部,滚动条将消失。
请注意,这并非每次都会发生 - 如果您再次尝试,它可能会起作用,但如果您从一个新的选项卡开始这些步骤,它似乎会一直发生。
我已经提出了 Chrome 的问题,但只是想知道是否有人知道发生了什么,是否有我可以实施的解决方法。
谢谢!
作为我的解决方法,如果您使用 jQueryMobile API。
$('selector').popup('open');
而不是依赖 jQueryMobile 标记
我的 Chrome 版本是“43.0.2357.81 m”,我也遇到了这个问题
弹出窗口似乎很奇怪,很难复制 - 转到下面的确切 link,然后单击上述 "sign in" 按钮似乎可以保证该行为。 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);
}
};
})
背景: jquery移动版 1.3.2 实现 jquery one() 事件处理程序附件有些不正确。
.one() - "Attach a handler to an event for the elements. The handler is executed at most once per element per event type." : http://api.jquery.com/category/events/ : 本质上是事件触发然后被删除。
但是使用 one() 同时调用 ("webkitAnimationEnd and animationend") 可能意味着只有 1 个(取决于浏览器)两个处理程序中的一个曾经被解雇,而另一个则停留太久,并可能导致内存泄漏。
Chrome43 处理 webkitAniationEnd 和 animationend - 但在任何给定时间只能处理一个。这会让另一个元素停留并在下次元素上出现动画时触发。