Jquery移动功能运行前设备准备好了

jquery mobile function running before the device ready

本文关键字:准备好了 运行 移动 功能 Jquery      更新时间:2023-09-26

我正在使用phonegap和jQuery Mobile构建一个android应用程序。

从phonegap文档中,device ready函数需要在其他任何操作之前被触发。

我不知道为什么,但是

$(document).on("pageshow", "#keeperList", function(){ 
listAllKeepers();
});

先开火

我不能发布完整的代码,因为它太多了。

 <script type="text/javascript" src="js/cordova.js"></script>
 <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
 <script type="text/javascript" src="js/jquery.mobile-1.3.1.js"></script>
 <script type="text/javascript" src="js/db.js"></script>
 <script type="text/javascript">
 var db;
 document.addEventListener("deviceready", onDeviceReady, false);
 function onDeviceReady() {
 alert("PhoneGap is ready!");
 db = window.openDatabase("rentManag", "3.7.11", "Rent Manag", 100000000);
 db.transaction(createTable, errorCB, successCB);
 }
 $(document).on('pageshow', "#keeperList", function () { 
 listAllKeepers();
 });
 </script>

如果你将Phonegap与JQuery Mobile结合使用,你必须等待JQuery Mobile的" pageccreate "和Phonegap的"deviceready"事件。这确保了两个框架都被正确加载。你应该这样做:

var jqmReady = $.Deferred();
var pgReady = $.Deferred();
// jqm ready
$(document).bind("pagecreate", jqmReady.resolve);
// phonegap ready
document.addEventListener("deviceready", pgReady.resolve, false);
$(document).on('pagecreate',function(event,data)
                 {

                 });
// all ready :)
$.when(jqmReady, pgReady).then(function () {
          listAllKeepers();
                               });

要回答您的问题,请检查下面的代码。这是我自己的变通方法。这可能不是最好的解决方案,但它可以完成工作。

它是做什么的:-在设备就绪时,它将值设置为true。-在页面加载时,您访问一个等待该值为真的函数。如果不是,它循环,直到它是。-这可以防止错误的东西没有被PhoneGap加载。

// device ready document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { // let the function "isDeviceReady" know that the event "deviceready" has been fired window.deviceReady = true; }

// callback function to check if device is ready function isDeviceReady(value, action) { if (window.deviceReady === true) { switch (action) { case "listAllKeepers": listAllKeepers(); break; case "listAllKeepersValue": // if you had a value listAllKeepers(value); break; } } else { window.setTimeout("isDeviceReady('"" + value + "'", '"" + action + "'");", 100); } }

// do stuff on page show $(document).on('pagebeforeshow', '#yourpageid', function (event, data) { isDeviceReady('', listAllKeepers); });