2012-03-27 7 views
0

Ich arbeite an einer für Mobilgeräte geeigneten Website mit jQuery Mobile, möchte aber mehrere HTML-Dateien mit jeweils einer Datenrolle verwenden: "page" div (anstelle mehrerer Daten) role = "page" divs in einer Datei, wie es der Standard zu sein scheint, da dies die maximale Wiederverwendung der vorhandenen Site ermöglicht. Ich kenne das ganze data-ajax = "false" -Konzept, das ich auf den <a> Tags der Hauptseite verwenden könnte, aber das deaktiviert die Seitenübergangseffekte, die wir wirklich mögen.jQuery Mobile Website mit mehreren Dateien

Ich habe versucht, pageshow, pagebeforeshow, paginein, document.ready, etc., aber keiner von denen wird immer ausgelöst, wenn ich direkt auf diese Seite gehe, im Gegensatz zu einem Link von der Hauptseite, dh das Inhaltsverzeichnis (oder Aktualisieren die Seite nach dem Folgen eines Links aus dem Inhaltsverzeichnis). Also im Grunde meine JS-Datei wie folgt aussieht:

('div[data-role="page"]:first').live('pageshow',function(){ /*do custom stuff here */})

Ich habe auch versucht, das Hinzufügen der Verweis auf diese JS auf die TOC-Seite Datei aber kein Glück ..., das ich irgendwie erwartet, aber ich dachte, ich würde versuchen, . Es fällt mir schwer zu glauben, dass JQM einfach nicht die Seite so unterstützt (ohne die Übergangseffekte zu verlieren), also vermisse ich wahrscheinlich etwas Einfaches.

+0

Welche Version von Jquery und Jquery Mobile verwenden Sie? – codaniel

+0

Es traf mich bald, als ich meine Frage direkt nach der Einreichung erneut las, dann probierte ich es aus und bestätigte meinen Verdacht ... das Problem war mit meinem Selektor ... div [data-role = "page"]: zuerst wählt das erste Seiten-Div der TOC-Seite aus, wenn ich einem Link vom Inhaltsverzeichnis folge. Also fing ich an IDs auf meinen Divs zu verwenden ... was ich sowieso die ganze Zeit gemacht hätte ... und es fing an zu arbeiten! – user1263226

+0

Nun, ich bin froh, dass du es herausgefunden hast. Jaspers Antwort ist eine wichtige Sache, die man sich ansehen sollte. Es gibt einige bekannte Probleme mit Live. Auch IDs funktionieren viel besser. Wenn Sie Jquery 1.7.x verwenden, verwenden Sie die Methode .on() anstelle von Live. – codaniel

Antwort

1
  1. .live() abgeschrieben wird, so verwenden .delegate(): http://api.jquery.com/on
  2. Sie eher zu IDs binden sollten mehrere Pseudo-Selektoren (ich glaube, das Ihr Problem ist, dass Ihre komplexen Wähler nicht gültig sein können für Event-Delegation) als die Verwendung von :

.

$(document).delegate('#my-page-id', 'pageinit', function() { 
    //you can now do work for the `#my-page-id` pseudo-page 
}); 

Wenn Sie alle der Pseudo-Seiten binden wollen, etwas zu tun global können Sie:

$(document).delegate('[data-role="page"]', 'pageinit', function() { 
    //you can now do work for all the `[data-role="page"]` "pages" 
}); 

Oder Sie könnten die verschiedenen data-role="page" Elemente setzen Klassen auf angeben, welche Sie wollen binden.

+0

Es traf mich bald, als ich meine Frage direkt nach der Einreichung erneut las, dann probierte ich es aus und bestätigte meinen Verdacht ... das Problem war mit meinem Selektor ... 'div [data-role =" page "]: first "wählt die erste Seite div * der TOC-Seite * aus, wenn ich einem Link vom Inhaltsverzeichnis folge. Also fing ich an IDs auf meinen Divs zu verwenden ... was ich sowieso die ganze Zeit gemacht hätte ... und es fing an zu arbeiten! – user1263226

+0

Das ist genau das, was du gesagt hast hehe, also habe ich das als Antwort markiert (in meiner Aufregung habe ich nicht alle Beiträge hier gelesen) ... obwohl ich jetzt ein neues Problem habe, es funktioniert nur beim ersten Seite geladen aus dem Inhaltsverzeichnis, jede separate Datei hat "nächste" und "vorherige" Navigationsschaltflächen und wenn ich diese verwende ich habe ein ähnliches Problem, irgendeine Idee warum? Aber wenn ich vom Inhaltsverzeichnis aus auf eine Seite klicke, dann klicke auf das Inhaltsverzeichnis dieser Seite und gehe von dort zur nächsten Seite. – user1263226