Pass parameter between pages using jquery mobile

前端 未结 2 1759
余生分开走
余生分开走 2020-11-29 09:19

What is the right way to pass parameters between pages in jquery mobile. In Q&A of jquery mobile, there is some suggestion for plugin. Is it mandatory? Please let me kno

相关标签:
2条回答
  • 2020-11-29 09:40

    Data/Parameters manipulation between page transitions

    It is possible to send a parameter/s from one page to another during page transition. It can be done in few ways.

    Reference: https://stackoverflow.com/a/13932240/1848600

    Solution 1:

    You can pass values with changePage:

    $.mobile.changePage('page2.html', { dataUrl : "page2.html?paremeter=123", data : { 'paremeter' : '123' }, reloadPage : true, changeHash : true });
    

    And read them like this:

    $(document).on('pagebeforeshow', "#index", function (event, data) {
        var parameters = $(this).data("url").split("?")[1];;
        parameter = parameters.replace("parameter=","");  
        alert(parameter);
    });
    

    [Example][3]:

    index.html

    <!DOCTYPE html>
      <html>
        <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="widdiv=device-widdiv, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <title>
        </title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
        <script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js">
        </script>
        <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>  
        <script>
            $(document).on('pagebeforeshow', "#index",function () {
                $(document).on('click', "#changePage",function () {     
                    $.mobile.changePage('second.html', { dataUrl : "second.html?paremeter=123", data : { 'paremeter' : '123' }, reloadPage : false, changeHash : true });
                }); 
            }); 
    
            $(document).on('pagebeforeshow', "#second",function () {
                var parameters = $(this).data("url").split("?")[1];;
                parameter = parameters.replace("parameter=","");  
                alert(parameter);
            });         
        </script>
       </head>
       <body>
        <!-- Home -->
        <div data-role="page" id="index">
            <div data-role="header">
                <h3>
                    First Page
                </h3>
            </div>
            <div data-role="content">
              <a data-role="button" id="changePage">Test</a>
            </div> <!--content-->
        </div><!--page-->
    
      </body>
    </html>
    

    second.html

    <!DOCTYPE html>
      <html>
        <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="widdiv=device-widdiv, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <title>
        </title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
        <script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js">
        </script>
        <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>  
       </head>
       <body>
        <!-- Home -->
        <div data-role="page" id="second">
            <div data-role="header">
                <h3>
                    Second Page
                </h3>
            </div>
            <div data-role="content">
    
            </div> <!--content-->
        </div><!--page-->
    
      </body>
    </html>
    

    Solution 2:

    Or you can create a persistent javascript object for a storage purpose. As long ajax is used for page loading (and page is not reloaded in any way) that object will stay active.

    var storeObject = {
        firstname : '',
        lastname : ''
    }
    

    Example: http://jsfiddle.net/Gajotres/9KKbx/

    Solution 3:

    You can also access data from the previous page like this:

    $('#index').live('pagebeforeshow', function (e, data) {
        alert(data.prevPage.attr('id'));
    });   
    

    prevPage object holds a complete previous page.

    Solution 4:

    As a last solution we have a nifty HTML implementation of localStorage. It only works with HTML5 browsers (including Android and iOS browsers) but all stored data is persistent through page refresh.

    if(typeof(Storage)!=="undefined") {
        localStorage.firstname="Dragan";
        localStorage.lastname="Gaic";            
    }
    

    Example: http://jsfiddle.net/Gajotres/J9NTr/

    More info

    If you want to learn more about this topic take a look at this article. You will find several solutions with examples.

    0 讨论(0)
  • 2020-11-29 09:44

    You can also use it with external relations in links (for me and my purpose its easier), so I wanted to share this:

    HTML:

     <a href="page1.htm?structure='123'">Structure</a>
    

    JS:

    $( document ).on( "pageinit", "#page1", function( event ) {
      var parameters = $(this).data("url").split("?")[1];
      parameter = parameters.replace("structure=","");
      alert(parameter);
    });
    

    In my case, the structure='123' is created dynamically, nobody writes a fixed value '123' for dynamic purposes :-)

    Thanks for the URL-splitting of the above post (pls. favor his post), this is just an addition / further explanation.

    0 讨论(0)
提交回复
热议问题