我在iOS 5及以下设备上遇到jQuery和Safari问题...
我有一个onClick
切换菜单的按钮,在iOS 5上的Safari中,在第一个click
上面的菜单显示下面然后在第二个上关闭..很棒..但之后需要点击3次再次显示菜单。这不会发生在iOS 6或桌面浏览器上。
我尝试用以下内容替换jQuery toggle()
函数,但这没有帮助。
pull.data('menuState','closed');
$(pull).on('click', function (e) {
if (pull.data('menuState') === 'closed') {
pull.data('menuState', 'open');
currentMenu.show();
} else {
pull.data('menuState', 'closed');
currentMenu.hide();
}
return false;
});
pull
和currentMenu
在我的代码中定义得更高。如果有任何帮助,该网站建立在bootstrap上。
答案 0 :(得分:0)
这是我替换切换功能所做的,它似乎运作良好。只需将您的需求置于奇怪和均匀的功能中:
// place this before all of your code, outside of document ready.
$.fn.ToggleFix = function(odd, even) {
return this.each(function() {
var Toggled = false;
$(this).on("click", function() {
if (Toggled) {
Toggled = false;
return odd.apply(this, arguments);
}
Toggled = true;
return even.apply(this, arguments);
});
});
};
//what do you want each toggle to do
function odd() {
$(this).animate({"left": "+=50px"}, "slow");//EXAMPLE
}
function even() {
$(this).animate({"left": "-=50px"}, "slow");//EXAMPLE
}
//call your toggle method like this after creating the function you want above
$(function(){
$("YOUR ELEMENT").ToggleFix(even, odd);
});
答案 1 :(得分:0)
事实证明iOS 5在我的代码中稍后触发了window.resize
功能,而不是100%它是最好的方法,但我检测到了围绕它编码的版本号。
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}