$(document).ready 没有在 iOS 上触发

Posted

技术标签:

【中文标题】$(document).ready 没有在 iOS 上触发【英文标题】:$(document).ready not firing on iOS 【发布时间】:2017-08-21 19:14:23 【问题描述】:

我的页面上有以下代码:

<script src="//path.to/jquery.min.js"></script>

<script>
 /* Statements #1 - Defining some variables... */
</script>

<script>
$(document).ready(function () 
 /* Statements #2 - Doing some stuf... */
);
</script>

上述代码在桌面和 android 设备上运行良好,但在 ios 设备上运行时,语句 #2 不起作用。我检查了控制台,没有错误。

只是为了测试,我已经通过复制/粘贴在控制台上执行了语句 #2,它按预期运行 - 这不仅仅自动工作,页面加载完成。

PS.:我在 iOS 设备上遇到错误 - 在 iPhone 上使用 Safari 进行测试,并在 Windows 10 上使用 Chrome 遥控器使用 iOS Webkit Proy 进行调试

【问题讨论】:

分享你的/* Statements #1/* Statements #2的代码 您确定在 $(document).ready(...) 之前包含 jquery 插件吗? @AlivetoDie - 语句#1 仅用于声明一些变量,而语句#2 在$(document).ready 下,未达到。 @Jordan - 是的,它们是按这个顺序排列的。 【参考方案1】:

我发现了问题:在我的代码中,我有一个具有预定值的函数,只有 Safari 引发了错误。所以,我正在使用这个:

function myFunction(parameter) 
    /* Coll stuf here... */

改为:

function myFunction(parameter = undefined) 
    /* Broken code... */

【讨论】:

【参考方案2】:

我遇到了同样的问题,但我发现这是因为我在脚本包含的末尾添加了“异步延迟”,这导致该函数在可用之前被调用 - 导致所有后续的 javascript 函数失败.不知道为什么这只发生在 Safari 而不是 Chrome/FF 中,而是有趣的东西。

<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/jquery.validate.min.js" async defer></script>

<script>
  $(document).on('ready', function() 
    $("#myForm").validate();
  );
</script>

删除“异步延迟”部分(Google 告诉我添加以提高页面加载速度)解决了该问题。

【讨论】:

以上是关于$(document).ready 没有在 iOS 上触发的主要内容,如果未能解决你的问题,请参考以下文章

为啥在ajax请求后没有加载document.ready

如何在没有 JQuery 的情况下模仿跨浏览器 $(document).ready() 行为 [重复]

jQuery document.ready 没有前置

如果 jQuery 不可用,有没有办法检查 document.ready() ? [复制]

Angular 外部 js 库调用 Document.Ready

jQuery:强制执行 document.ready() 调用的顺序