setTimeout不能在safari手机上工作

setTimeout not working on safari mobile

本文关键字:工作 手机 safari 不能 setTimeout      更新时间:2023-09-26

我有一个功能,显示菜单时点击它,我希望它在5秒后消失。这是我的javascript -它在桌面浏览器上正常工作,但它不会在移动浏览器上消失。

$(function() {
    $('#prod_btn').click(function() {
        $(this).addClass('selected').next('ul').css('display', 'block');
        setTimeout(hideMenu, 5000);
    });
});
function hideMenu() {
    $('#prod_btn').removeClass('selected').next('ul').css('display', 'none');
}

问题在哪里?

谢谢

我刚刚遇到了同样的问题。我的代码在Mac上的任何浏览器上都运行得很好,但在iOs设备上就不行了。

我在超时函数上使用"。bind(this)",这就是导致我出现问题的原因。当我用"。在我的脚本中,Bind就像一个咒语。

我的代码是这样的:

searchTimeout = setTimeout(function() {
...
}.bind(this),250);

为了在iOs设备上工作,我(如上所述)添加了以下内容:

Function.prototype.bind = function(parent) {
    var f = this;
    var args = [];
    for (var a = 1; a < arguments.length; a++) {
        args[args.length] = arguments[a];
    }
    var temp = function() {
        return f.apply(parent, args);
    }
    return(temp);
}

我在你的setTimeout上没有看到任何.bind,但对于其他有同样问题的人来说,这可能是问题所在。这就是我发帖的原因:-)

我将您的示例移动到jsbin中,它可以在我的iphone 4上工作。

请在您的设备上进行测试:http://jsbin.com/asihac/5

您可以在这里看到代码http://jsbin.com/asihac/5/edit

这个例子是使用jQuery -最新的,我只添加了所需的css类

这并不适用于你的代码,但是长时间运行的脚本在iOS设备上失败的一个常见问题是,MobileSafari在10秒后杀死了一个javascript线程。你应该能够使用setTimeout和/或setInterval来解决这个问题,或者你可以通过创建一个快捷方式来避免它,从而将它作为一个应用程序运行。参见https://discussions.apple.com/thread/2298038,特别是Dane Harrigan的评论。

还要记住,如果延迟设置为太短的值,则任何setTimeout函数实际上都可能在DOM元素呈现时触发。虽然这似乎是显而易见的,但它很容易与没有方法触发混淆。一个好的测试方法是运行一个警报提示符。

window.onLoad(alert("hey!"));