Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout无法在safari mobile上工作_Javascript_Jquery_Mobile Safari_Settimeout - Fatal编程技术网

Javascript setTimeout无法在safari mobile上工作

Javascript setTimeout无法在safari mobile上工作,javascript,jquery,mobile-safari,settimeout,Javascript,Jquery,Mobile Safari,Settimeout,我有一个功能,显示菜单时,点击它,我希望它消失后5秒。这是我的javascript——它在桌面浏览器上正常工作,但在移动浏览器上不会消失 $(function() { $('#prod_btn').click(function() { $(this).addClass('selected').next('ul').css('display', 'block'); setTimeout(hideMenu, 5000); }); }); functi

我有一个功能,显示菜单时,点击它,我希望它消失后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');
}
问题在哪里


谢谢

我将您的示例移动到了一个jsbin,它正在我的iphone 4上运行

请从您的设备在此处进行测试:

你可以在这里看到代码


该示例使用jQuery-latest,我只添加了所需的css类。

我刚刚遇到了同样的问题。我的代码在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);
}
Function.prototype.bind=函数(父函数){
var f=这个;
var args=[];
对于(var a=1;a

我看不到你的setTimeout上有任何.bind,但对于其他有相同问题的人来说,这可能就是问题所在。这就是为什么我要发布:-)

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

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

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

然后检查您的函数是否在之后触发。

当我在hideMenu()函数中放入警报()时,safari mobile中为我触发了超时。它对你有用吗?我试过了,但没有显示任何内容,似乎没有启动函数…你使用的jquery、safari等的版本是什么?它适用于我在模拟器上使用jQuery1.6.4和iOS4.3。你有错误吗?我在iPhone4和iPad2上试过iOS 5,在iPhone3GS上试过4.3,但仍然不起作用,我使用的是jquery 1.6.2我没有错误,只是什么都不做,也没有警告消息……这是一个大问题。我刚刚试着调试了20k行,试图找出为什么它在iOS 6而不是iOS 5中工作。谢谢使用您的第一个示例。这适用于iOS 9.2!谢谢