对话框选择器

时间:2013-10-24 11:44:23

标签: jquery jquery-mobile cordova ios7

由于我们的一些用户已升级到 iOS7 ,我们发现 phonegap(cordova)应用程序中的某些页面似乎失败了。场景是这样的:

用户想要预订工作,因此他们点击预订,会出现一个对话框并选择预订的小时数,然后点击预订。应用程序使用AJAX与我们的服务器通信,后者发回结果。如果出现错误(例如他们无法预订此人,则应用程序会显示另一个对话框。但是,当我们尝试通过$('#Warnings')访问div时尝试在此对话框上运行JavaScript时,应用程序就会停止运作。

任何人都可以说明为什么会发生这种情况以及发生了什么。 (它可以在iOS6上运行,我已经记录了它已经在li添加到ul之前就已经开始了,我已经尝试更改我们移动它的事件,看看div是否存在(哪个导致应用程序崩溃),将JavaScript移动到页面底部。我刚刚用完了想法!

我们正在运行 JQuery-Mobile 1.3.2 JQuery 1.9 。 Append似乎适用于所有其他页面,与我们在这里的方式相同。

if (Ps.Logic.Type.hasValue(logicResult.Warnings)) {

    for (var f in logicResult.Warnings) {
        //add to warnings list
        Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings : (" + f + ") " + logicResult.Warnings[f], function () {
            //code
        });
        $('#WarningsList').append("<li>" + logicResult.Warnings[f] + "</li>");

        Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings : Added (" + f + ")", function () {
            //code 
        });
    }

    Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings : Done", function () {
        //code
    });

} else {
    Ps.File.Log("Diary_Logic_Error_Dialogue: Processing Warnings - No Value (Skipping)", function () {
        //code
    });
}

修改

基本上发生的事情是用户将作业放入一个时间段,然后进行以下对话:

The user confirms their selection

当用户点击“分配预订”时,客户端会与服务器通话,如果出现问题,该服务器会检查所有内容,那么它应显示以下对话框:

enter image description here

在ios6上,这很好用,显示错误,用户可以继续或取消。但是,当我们尝试显示此对话框(图像2中的那个)时更新到ios7,那么一旦我们尝试执行将项目编辑/附加到DOM的操作,它似乎就会停止处理页面。

1 个答案:

答案 0 :(得分:0)

似乎在我们要访问的页面上放置一个事件监听器实际上并不起作用 - 就好像当那个事件被调用时DOM不在那里一样。 e.g。

<强>的index.html

 $.mobile.changePage("Page.html")

<强> page.html中

$('#diary_Logic_error_dialog_page').on("pageshow", function () {
    $('#ProceedButton').bind("click", Test);
});

但是我们似乎不能这样做。似乎,至少在ios7中,我们必须做更多的事情:

<强>的index.html

(这条线对我来说实际上是另一个由index.html页面引用的javascript文件。)

$(document).delegate('#page', "pageshow", function (event) { PageShowExample() });

...

$.mobile.changePage("Page.html")

<强> page.html中

function PageShowExample() { ... }

通过执行此操作,似乎在调用页面显示时DOM就在那里,因此一旦我们尝试操作DOM,它就不会死亡。