jQuery document.ready 不会被 Android 的第二个屏幕触发

Posted

技术标签:

【中文标题】jQuery document.ready 不会被 Android 的第二个屏幕触发【英文标题】:jQuery docment.ready not getting fired from second screen in Android 【发布时间】:2016-06-02 16:38:07 【问题描述】:

jQuery docment.ready 没有从第二个屏幕被触发,而它在第一个/初始屏幕被触发。

jQuery Mobile 也包含在 html 中,jQuery Mobile 是否阻塞了 document.ready,我在某处看到我们必须使用 jQuery Mobile 的“pageinit”而不是“document.ready”。但这个应用程序是为所有平台——桌面、平板电脑和移动而开发的。

那么在这种情况下,合适的解决方案是什么?在所有页面上从 document.ready 更改为 pageinit 很乏味。

【问题讨论】:

什么是“第二屏”? JQM 是一个框架,因此要使事情正常进行,您需要遵守该框架的规则。不要走捷径,因为你觉得它们很乏味 ***.com/a/23302340/1771795 【参考方案1】:

jquery-mobile 没有阻止 $( document ).ready( )

当 DOM 完全加载时触发 ready 事件。Jquery API Doc of .ready()

jquery-mobile 的最大优势之一是 ajax 导航。如果单击链接,jqm 不会再次加载整个页面。不!它仅加载具有 role="page" 的 div 并将其添加到 DOM。 当 DOM 不再加载时,您将不会收到第二个 ready 事件。

要控制您的应用程序,您必须利用来自 jquery-mobile 的事件。您可以准确地检测到显示的页面,您可以检测到页面何时(通过 AJAX)加载到 DOM 中。


jquery-mobile 中有很多有趣的事件。 pageshow 和 pagecreate(不是 pageinit,因为 pageinit 在 1.4.0 中已弃用,取而代之的是 pagecreate) 我包括了一些基本的例子。但是还有更多的事件和方法来倾听它们。

jquery-mobile Pagecontainer API jquery-mobile Events API

页面创建

pagecreate(文档,一个) 这将在创建页面后执行。请注意,我使用的是一个而不是打开。 如果您使用 on 而不是 one,则在创建和增强页面时,将为每个页面触发此事件。

$( document ).one( "pagecreate", function( event )  

);

pagecreate(特定页面) 这将在创建 id 为 page1 的页面时触发。

$("#page1" ).on( "pagecreate", function( event ) 

);  

页面展示

页面显示(文档) 这将在每次显示页面时触发。

$(document).on("pageshow", function( event ) 

);

pageshow(特定页面) 每次显示 id 为 page1 的页面时都会触发此操作。

$("#page1" ).on("pageshow", function( event ) 

);

【讨论】:

是的,我知道 dom ready 没有被触发,因为 DOM 没有再次加载,我提到了 pageinit,因为 jQuery Mobile 版本较低,现在也无法升级。正如我所提到的,在所有页面中更改或添加 pageinit 或 pagecreate 或其他事件是一项繁琐的工作。寻找更简单的解决方案。

以上是关于jQuery document.ready 不会被 Android 的第二个屏幕触发的主要内容,如果未能解决你的问题,请参考以下文章

jquery - $(document).ready() 内的范围?

Jquery 验证不适用于 Document.ready()

jQuery事件详解之$(document).ready()

jQuery(function($) ) 与 $(document).ready(function()) 有啥区别??

$(document).ready 简写

jquery代码如何写到外部js中 为啥 在外部js中 写上 $(document).ready(function();就报错