2013-02-26 21 views
5

Mam problem z jQuery i jak dynamicznie przetwarzać adresy URL. Chciałbym to zrobić, jeśli mam stronę z linkami i każdy z nich ma identyfikator do wywoływania funkcji i identyfikatora. Jak mogę zmienić adres URL dla konkretnego linku i ustawić go jako zakładki. Poniżej jest mój kodDynamiczna nawigacja JQuery Mobile

<div data-role="page" id="#listview"> 
<div data-role="header"> 
    <h1>List</h1> 
</div> 

<div data-role="content"> 
<ul data-role="listview" id="carlist"> 
    <li><a href="#" onclick="cardetails('1')">Acura</a></li> 
    <li><a href="#" onclick="cardetails('2')>Audi</a></li> 
    <li><a href="#" onclick="cardetails('3')>BMW</a></li> 
</ul> 
</div> 

<div data-role="footer"> 
    <h4>Page Footer</h4> 
</div> 

Więc po kliknięciu na samochodzie na liście funkcji o nazwie cardetails z parametrem 1 trafi z powrotem do serwera i uzyskać cardetails dla samochodu z id = 1 . Mój problem nie jest taki, ale kiedy dane JSON powróciły, chcę, aby adres URL zmienił się na karty wstępne nr 1 lub coś podobnego. Dzięki temu może zidentyfikować, gdzie jest użytkownik, przeglądarka może dodać go do swojej historii i jeśli użytkownik zakoduje adres URL, przeglądarka będzie mogła znaleźć tę dokładną stronę z tymi samymi danymi.

+0

Jeśli nadal masz problemy i chcesz w pełni funkcję URL nawigacji, prosimy spróbować swoich [plug-in] (https://github.com/CameronAskew/jquery.mobile.paramsHandler), że niedawno stworzony dla jQM 1.4+ –

Odpowiedz

9

W tym przykładzie użyto jQM changePage() do wysyłania danych z żądaniem strony Ajax. Może być używany tylko wtedy, gdy argumentem "to" adresu URL jest changePage(). Sprawdź numer jQM documentation, aby uzyskać więcej informacji.

Instrukcje przetestować przykład:

  • Utwórz folder
  • Utwórz plik z nazwą cars.js wewnątrz folderu
  • Utwórz plik o nazwie cars.html wewnątrz folderu
  • Utwórz plik o nazwie car-details.html w folderze
  • Wypełnij każdy plik odpowiednim kodem, który znajdziesz poniżej:
  • Otwórz cars.html która jest pierwszą stronę i przejdź

Dodaj następujący kod wewnątrz pliku car.js:

$(document).on("pageinit", "#car-page", function(e) { 
    $('#car-list a').on('click', function(e) { 
     e.preventDefault(); 
     $.mobile.changePage('car-details.html', { 
      data: { 
       id: this.id 
      } 
     }); 
    }); 
}); 

$(document).on("pageinit", "#car-details-page", function(e) { 
    var passedId = (($(this).data("url").indexOf("?") > 0) ? $(this).data("url") : window.location.href).replace(/.*id=/, ""); 
    $("#details").html(["Selected id is: '", passedId, "'"].join("")); 
}); 

Dodaj następujący kod wewnątrz strony cars.html.

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>Cars example</title> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" /> 
     <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
     <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
     <script src="./cars.js"></script> 
    </head> 
    <body> 
     <div id="car-page" data-role="page"> 
      <div data-role="header"> 
       <h1><a data-ajax="false" href="/">Car list</a></h1> 
      </div> 
      <div data-role="content"> 
       <ul data-role="listview" id="car-list"> 
        <li><a href="#" data-transition="flip" id="acura">Acura</a></li> 
        <li><a href="#" data-transition="flip" id="audi">Audi</a></li> 
        <li><a href="#" data-transition="flip" id="bmw">BMW</a></li> 
       </ul> 
      </div> 
     </div> 
    </body> 
</html> 

Dodaj następujący kod na stronie car-details.html.

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>Car Example</title> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" /> 
     <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
     <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
     <script src="./cars.js"></script> 
    </head> 
    <body> 
     <div id="car-details-page" data-role="page"> 
      <div data-role="header"> 
       <h1><a data-ajax="false" href="/">Car details</a></h1> 
       <a data-rel="back">Back</a> 
      </div> 
      <div data-role="content"> 
       <div id="details"></div> 
      </div> 
     </div> 
    </body> 
</html> 

Przykład 2

roztworu stosując wspólną przedmiotu JS:

Z drugiej strony wybranego identyfikatora na div pojawi. Ponadto adres URL zawiera identyfikator, dzięki czemu można go dodać do zakładek. W przypadku, gdy użytkownik przechodzi na drugą stronę przez pierwszą stronę, identyfikator jest przekazywany na drugą stronę za pośrednictwem wspólnej zmiennej JS. W przypadku, gdy użytkownik otworzy stronę z zakładkami, identyfikator zostanie wyodrębniony z window.location.href.

Należy pamiętać, że zamiast podawać wartość href we wspólnej zmiennej, można przekazać identyfikator lub dowolną inną wartość, która pomoże zidentyfikować wybór użytkownika.

Instrukcje przetestować przykład:

  • Utwórz folder
  • Utwórz plik z nazwą cars.js wewnątrz folderu
  • Utwórz plik o nazwie cars.html wewnątrz folderu
  • Utwórz plik o nazwie car-details.html w folderze
  • Wypełnij każdy plik odpowiednim kodem, który znajdziesz poniżej:
  • Otwórz cars.html która jest pierwszą stronę i przejdź

Dodaj następujący kod wewnątrz pliku car.js:

var passDataObject = { selectedHref: null } 

$(document).on("pageinit", "#car-page", function(e) { 
    $(this).find('a').unbind('click').click(function() { 
     passDataObject.selectedHref = this.href; 
    }); 
}); 

$(document).on("pageinit", "#car-details-page", function(e) { 
    var passedId = (passDataObject.selectedHref != null ? passDataObject.selectedHref : window.location.href).replace(/.*id=/, ""); 
    $("#details").html(["Selected id is: '", passedId, "'"].join("")); 
}); 

Dodaj następujący kod wewnątrz strony cars.html:

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>Cars example</title> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" /> 
     <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
     <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
     <script src="./cars.js"></script> 
    </head> 
    <body> 
     <div id="car-page" data-role="page"> 
      <div data-role="header"> 
       <h1><a data-ajax="false" href="/">Car list</a></h1> 
      </div> 
      <div data-role="content"> 
       <ul data-role="listview" id="car-list"> 
        <li><a href="./car-details.html?id=1" data-transition="flip" id="acura">Acura</a></li> 
        <li><a href="./car-details.html?id=2" data-transition="flip" id="audi">Audi</a></li> 
        <li><a href="./car-details.html?id=3" data-transition="flip" id="bmw">BMW</a></li> 
       </ul> 
      </div> 
     </div> 
    </body> 
</html> 

Dodaj następujący kod wewnątrz samochodu-details.html:

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>Car Example</title> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" /> 
     <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
     <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
     <script src="./cars.js"></script> 
    </head> 
    <body> 
     <div id="car-details-page" data-role="page"> 
      <div data-role="header"> 
       <h1><a data-ajax="false" href="/">Car details</a></h1> 
       <a data-rel="back">Back</a> 
      </div> 
      <div data-role="content"> 
       <div id="details"></div> 
      </div> 
     </div> 
    </body> 
</html> 

Przykład 3

Multipage Przykład (Pasek adresu URL nie zmienia się w zależności od wyboru samochodu)

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>Cars example</title> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" /> 
     <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
     <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
     <script> 
      var passDataObject = { selectedId: null } 

      $(document).on("pageinit", "#car-page", function(e) { 
       $(this).find('a').unbind('click').click(function(e) { 
        e.preventDefault(); 
        passDataObject.selectedId = this.id; 
        $.mobile.changePage('#car-details-page', { transition: 'flip'}); 
       }); 
      }); 

      $(document).on("pagebeforeshow", "#car-details-page", function(e) { 
       $("#details").html(["Selected id is: '", passDataObject.selectedId, "'"].join("")); 
      }); 
     </script> 
    </head> 
    <body> 
     <div id="car-page" data-role="page"> 
      <div data-role="header"> 
       <h1><a data-ajax="false" href="/">Car list</a></h1> 
       <a data-rel="back">Back</a> 
      </div> 
      <div data-role="content"> 
       <ul data-role="listview" id="car-list"> 
        <li><a href="#" id="acura">Acura</a></li> 
        <li><a href="#" id="audi">Audi</a></li> 
        <li><a href="#" id="bmw">BMW</a></li> 
       </ul> 
      </div> 
     </div> 
     <div id="car-details-page" data-role="page"> 
      <div data-role="header"> 
       <h1><a data-ajax="false" href="/">Car details</a></h1> 
       <a data-rel="back">Back</a> 
      </div> 
      <div data-role="content"> 
       <div id="details"></div> 
      </div> 
     </div> 
    </body> 
</html> 

Mam nadzieję, że to pomaga.

+0

Otrzymuję błąd podczas ładowania strony w dowolnym momencie Klikam na link w cars.html dlaczego tak jest? –

+0

Ok ustalone to działa dobrze teraz dzięki –

+0

@KernElliott Zapraszamy –