首次切换后的jQuery仅在Safari iOS5中单击3次后触发

时间:2013-01-31 16:19:01

标签: javascript jquery ios mobile

我在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;
});

pullcurrentMenu在我的代码中定义得更高。如果有任何帮助,该网站建立在bootstrap上。

2 个答案:

答案 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);
 });

jsFIDDLE

答案 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)];
}
}