2013-01-18 49 views
1

我遇到的問題做以下簡單的腳本來工作,但它不是:jQuery Mobile的changePage失敗

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

    <div data-role="content"> 
     <form action="" method="" name="targetForm"> 
      <a id="bt-addTarget" data-role="button" data-icon="plus">Add Target</a> 
     </form> 
    </div><!-- /content --> 

    <div id="addTargetDialog" data-role="dialog"> 
     <div data-role="header" data-theme="d"> 
      <h1>Choose a Target</h1> 
     </div> 
     <div data-role="content" data-theme="c"> 
      <form action="" method="" name="addTargetForm"> 
       <input type="hidden" name="addTarget" value="yes" /> 
       <select name="target"> 
        <option value="test 1">test 1</option> 
        <option value="test 2">test 2</option> 
       </select> 
       <a id="btn-apply" href="target.php" data-role="button" data-theme="b">Apply</a>  
       <a href="target.php" data-role="button" data-rel="back" data-theme="c">Cancel</a> 
      </form> 
     </div> 
    </div> 

    <script> 
     $(document).undelegate("#targetPage", "pageinit").delegate("#targetPage", "pageinit", function() { 
       $('form[name="targetForm"] #bt-addTarget').off('click').on('click', function(e){ 
         e.preventDefault(); 
         $.mobile.changePage("#addTargetDialog"); 
       }); 
     }); 
    </script> 

</div> 

$ .mobile.changePage( 「#addTargetDialog」);被稱作但未能

+0

是什麼的JavaScript控制檯說?在'mobileinit'事件觸發後,您是否嘗試過執行腳本? – davids

回答

3

數據角色=「對話框」 DIV必須在同一水平原始頁面從那裏它被稱爲:

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

    <div data-role="content"> 
     <form action="" method="" name="targetForm"> 
      <a id="bt-addTarget" data-role="button" data-icon="plus">Add Target</a> 
     </form> 
    </div><!-- /content --> 
</div> 

<div id="addTargetDialog" data-role="dialog"> 
    <div data-role="header" data-theme="d"> 
     <h1>Choose a Target</h1> 
    </div> 
    <div data-role="content" data-theme="c"> 
     <form action="" method="" name="addTargetForm"> 
      <input type="hidden" name="addTarget" value="yes" /> 
      <select name="target"> 
       <option value="test 1">test 1</option> 
       <option value="test 2">test 2</option> 
      </select> 
      <a id="btn-apply" href="target.php" data-role="button" data-theme="b">Apply</a>  
      <a href="target.php" data-role="button" data-rel="back" data-theme="c">Cancel</a> 
     </form> 
    </div> 
</div> 

<script> 
    $(document).undelegate("#targetPage", "pageinit").delegate("#targetPage", "pageinit", function() { 
      $('form[name="targetForm"] #bt-addTarget').off('click').on('click', function(e){ 
        e.preventDefault(); 
        $.mobile.changePage("#addTargetDialog"); 
      }); 
    }); 
</script> 

工作例如:http://jsfiddle.net/Gajotres/M6Gvz/

編輯:

舊的HTML是這樣的:

<div data-role="page" id="targetPage"> 
    <div data-role="content"> 
      ... 
    </div> 

    <div id="addTargetDialog" data-role="dialog"> 
      ... 
    </div><!-- end dialog --> 

    <script> 
      ... 
    </script> 
</div> <!-- end targetPage --> 

新的HTML正在尋找這樣的:

<div data-role="page" id="targetPage"> 
    <div data-role="content"> 
      ... 
    </div> 
</div><!-- end targetPage --> 

<div id="addTargetDialog" data-role="dialog"> 
     ... 
</div><!-- end dialog --> 

<script> 
     ... 
</script> 

如果你想知道如何在您的網頁實現這一點。

如果你有多個HTML頁面做這樣的:

HTML 1 

    <div>PAGE 1</div> 
    <div>DIALOG 1</div> 
    <script>PAGE 1</script> 

HTML 2 

    <div>PAGE 2</div> 

HTML 3 

    <div>PAGE 3</div> 

如果你有1個HTML多頁做這樣的:

HTML 1 

    <div>PAGE 1</div> 
    <div>PAGE 2</div> 
    <div>PAGE 3</div> 
    <div>PAGE 4</div> 
    <div>PAGE 5</div> 
    <div>DIALOG 1</div> 
    <script>PAGE 1</script> 
+0

Thx幫助@Gajotres! 「與原始頁面在同一級別上」是什麼意思?你能告訴我你有什麼改變嗎? – Steve

+0

我會編輯我的答案並告訴你。 – Gajotres

+0

謝謝!但問題是當我從另一個頁面來到這個頁面時,對話框不再顯示,因爲對話框div在頁面之外,所以它沒有被JQM加載...... – Steve