0

内部ページへのリンクがあるページがあります。以下のコードを見つけてください。

<body> 
    <div id="serviceDetailsPage" data-role="page">

        <div data-role="header" data-position="fixed" data-tap-toggle="false" data-theme="e">
        </div>

        <div data-role="content">

           <a class="loadAudio" data-role="button" data-mini="true" data-inline="true" href="#testPage">test</a>

        </div>      

        <div data-role="footer" class="footerLinks" data-position="fixed"> 
        </div> 
    </div>

    <div id="testPage" data-role="page">

        <div data-role="header" data-position="fixed" data-tap-toggle="false" data-theme="e">
        </div>

        <div data-role="content">

           testPage

        </div>      

        <div data-role="footer" class="footerLinks" data-position="fixed"> 
        </div> 
    </div>

    <script>
    $('#testPage').live('pagecreate',function(){
        console.log(window.location.hash);//returns an empty string
       console.log(window.location.href);//returns old URL
    });
    </script>

    </body>

ページが読み込まれるときの URL は

../MyApp/index.html

リンクをクリックすると、URL が次のように変わります

../MyApp/index.html#testPage

window.location.href を使用すると古い URL を取得します。更新された URL を取得すると思っていました。window.location.hash は空の文字列を返します。これは、ページの間違ったイベントで呼び出しているためですか?

4

1 に答える 1

0

新しい URL にまだ移動していないときに、pagecreate でチェックしているため、古い URL を取得しています (移動する前にテストページが作成されます)。代わりに pageshow で確認すると、両方の方法で正しい値 (ただし異なる文字列) が得られます。$.mobile.activePage.attr("id") を使用することもできます。

$( document ).delegate('#testPage', 'pageshow',function(){
   console.log(window.location.hash);
   console.log(window.location.href);
   console.log($.mobile.activePage.attr("id"));
});​

(.live の代わりに .delegate も使用しました)

于 2012-07-02T01:39:30.640 に答える