5

こんにちは、index.html から正常に動作する test.html に移動して$.mobile.changePage("test.html", {transition : "slide"}); います。しかし、私のtest.htmlには、異なるdivに複数のhtmlページがあります。test.html では、同じ html ファイル (ietest.html) の別の div にある別の html ページを呼び出していますが$.mobile.changePage("#secondtestPage", {transition : "slide"}); 、ここでは secondtestPage に移動しません。私の index.html は次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>jQuery Mobile: Demos and Documentation</title>

    <link rel="stylesheet"  href="jquery.mobile/jquery.mobile-1.1.0.css" />
    <link rel="stylesheet" href="docs/assets/css/jqm-docs.css" />
    <link rel="stylesheet" href="docsdemos-style-override.css" />
    <script type="text/javascript" src="jquery.mobile/jquery-1.7.2.min"></script>
    <script type="text/javascript" src="jquery.mobile/jquery.mobile-1.1.0.js"></script>
    <!-- Uncomment following line to access PhoneGap APIs (not necessary to use PhoneGap to package web app) -->
    <!-- <script type="text/javascript" charset="utf-8" src="cordova-1.6.1.js"></script>-->


</head> 
<body> 
    <div data-role="page" id="firstPage" onclick=callSecondPage() class="type-home" data-ajax="false" >

            <div data-role="button">
                <input type="submit" data-role="button" value="firstPage" id="firstPage">
            </div>



    </div>  


    <script type="text/javascript">
                function callSecondPage()
                {
                    alert ("Ins ide callPage");

                    //$.mobile.changePage('#secondPage');
                    $.mobile.changePage("test.html", {transition : "slide"});


                }
            </script>

</body>
</html>

ページが test.html に移動すると、私の test.html は次のようになります。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>jQuery Mobile: Demos and Documentation</title>

        <link rel="stylesheet"  href="jquery.mobile/jquery.mobile-1.1.0.css" />
        <link rel="stylesheet" href="docs/assets/css/jqm-docs.css" />
        <link rel="stylesheet" href="docsdemos-style-override.css" />
        <script type="text/javascript" src="jquery.mobile/jquery-1.7.2.min"></script>
        <script type="text/javascript" src="jquery.mobile/jquery.mobile-1.1.0.js"></script>
        <!-- Uncomment following line to access PhoneGap APIs (not necessary to use PhoneGap to package web app) -->
        <!-- <script type="text/javascript" charset="utf-8" src="cordova-1.6.1.js"></script>-->


    </head> 
    <body> 
        <div data-role="page" id="firsttestPage" onclick=callnewSecondPage() class="type-home" data-ajax="false" >

                <div data-role="button">
                    <input type="submit" data-role="button" value="firsttestPage" id="firsttestPage">
                </div>

                <script type="text/javascript">
                    function callnewSecondPage()
                    {
                        alert ("Inside callPage");

                        //$.mobile.changePage('#secondPage');
                        $.mobile.changePage("#secondtestPage", {transition : "slide"});
                        //$.mobile.changePage("index.html", {transition : "slide"});


                    }
                </script>

        </div>

        <div data-role="page" id="secondtestPage"  onclick=callThirdPage() class="type-home" data-ajax="false" >

                <div data-role="button">
                    <input type="submit" data-role="button" value="secondtestPage" id="secondtestPage">
                </div>

                <script type="text/javascript">
                    function callThirdPage()
                    {
                        alert ("Inside callPage");

                        $.mobile.changePage('#thirdtestPage');

                    }
                </script>

        </div>

        <div data-role="page" id="thirdtestPage"  onclick=callFourthPage() class="type-home">

                <div data-role="button">
                    <input type="submit" data-role="button" value="thirdtestPage" id="thirdtestPage">
                </div>

                <script type="text/javascript">
                    function callFourthPage()
                    {
                        alert ("Inside callPage");

                        $.mobile.changePage('#fourthtestPage');

                    }
                </script>

        </div>

        <div data-role="page" id="fourthtestPage" class="type-home">

                <div data-role="button">
                    <input type="submit" data-role="button" value="fourthtestPage" id="fourthtestPage">
                </div>

        </div>

        <div data-role="page" id="fifthtestPage" class="type-home">

                <div data-role="button">
                    <input type="submit" data-role="button" value="fifthtestPage" id="fifthtestPage">
                </div>

        </div>

        <div data-role="page" id="sixthtestPage" class="type-home">

                <div data-role="button">
                    <input type="submit" data-role="button" value="sixthtestPage" id="sixthtestPage">
                </div>

        </div>
    </body>
</html>

しかし、ボタンをクリックしても「callSecondPage」に移動しません。そして、私が呼び出すと$.mobile.changePage("index.html", {transition : "slide"}); 、index.htmlに正しく移動します.なぜマルチページでchangePageが機能しないのですか? もう1つ、index.htmlコードをtest.htmlコードに置き換えると、$.mobile.changePage("#secondtestPage", {transition : "slide"});完全に機能します。

なぜこのように振る舞うのか混乱していますか?任意の提案をいただければ幸いです。前もって感謝します。

4

2 に答える 2

6

jQuery Mobile は、test.htmlファイルに移行するためにその内容を非同期に読み込みます。index.htmltest.htmlcallSecondPage()の両方で同じスコープ内に定義された関数があり、おそらく問題があります。test.htmlで別の名前を付けてみて、報告してください。

編集:

jQuery Mobile は、最初のページ以外のすべての data-role="page" ページを実際にロードしないことがわかりました。index.html から test.html への移行中に DOM を調べると、2 ページ目、3 ページ目、4 ページ目が欠落していることに気付くでしょう。

これは jQuery Mobile のドキュメントからのものです: http://jquerymobile.com/demos/1.0a3/#docs/pages/docs-pages.html

Ajax 経由で読み込まれたモバイル ページから複数の内部ページを含むページにリンクする場合は、リンクにrel="external"またはdata-ajax="false"を追加する必要があることに注意してください。これは、URL の Ajax ハッシュを消去するために、フレームワークにページ全体のリロードを行うように指示します。Ajax ページはハッシュ (#) を使用して Ajax 履歴を追跡しますが、複数の内部ページはハッシュを使用して内部ページを示すため、競合が発生するため、これは重要です。

于 2012-08-08T04:55:47.487 に答える
0

メソッドの最後に値を追加falseして、問題を解決しました。

$.mobile.changePage("#secondtestPage", {transition : "slide"}, false);
于 2013-10-28T12:15:31.030 に答える