2011-01-05 6 views
0

Ich verwende das Plugin JQuery-Zyklus (mit Attributen in einer separaten Website breite benutzerdefinierte js-Datei definiert), um zwischen den zwei Seiten (von Tabellen getrennt) einer Form. Jede Seite hat eine eigene Validierungsgruppe für die Steuerelemente auf dieser Seite. Die erste Seite hat eine "Weiter" -Schaltfläche, die beim Klicken die Seitenvalidierung für die erste Validierungsgruppe auslöst. Wenn dies fehlschlägt, werden die QuickInfos angezeigt, damit der Benutzer die Informationen korrigieren kann. Wenn die Validierung erfolgreich ist, wird der nächste Zyklusbefehl aufgerufen.JQuery Cycle-Plugin muss Zyklus zum nächsten Dia auf Post zurück, wenn Validierungsgruppe nicht gültig

$('#request-information').cycle('next'); 

Auf der zweiten Seite sind die Steuerelemente in einer zweiten Validierungsgruppe mit der Übermittlungsschaltfläche gruppiert. Wenn auf die Schaltfläche "Senden" geklickt wird, wird die serverseitige Validierung ausgelöst. Wenn dies fehlschlägt, wird die Seite beim Postback neu geladen. All dies funktioniert, außer wenn die zweite Seite fehlschlägt Ich möchte, dass das Formular auf der zweiten Seite bleibt. Wenn also die Webseite neu geladen wird, weil die zweite Seite des Formulars nicht validiert werden konnte, muss ich entweder die Startfolie auf die zweite Seite des Formulars setzen oder, wenn das nicht möglich ist, zumindest den nächsten Zyklusbefehl auslösen.

Es sieht nicht so aus, als ob ich den startingsslide einfach auf die zweite Seite des Formulars setzen kann, da dies die anderen definierten Attribute der Zyklusfunktion, die in der separaten js-Datei gesetzt sind, überschreibt.

Wer weiß also, wie man beim Laden der Postback-Seite zur zweiten Folie vorrückt, je nachdem, ob die zweite Validierungsgruppe beim Klicken auf die Schaltfläche zum Senden fehlgeschlagen ist? Oder sollte ich mit viewstate etwas anderes machen?

Leider ist dies eine lange umständliche Frage. Hoffnung ist klar und nicht verwirrend. Danke

Antwort

1

Wenn Sie wissen, dass Sie mit dem zweiten Schlitten gehen müssen, wenn Ihre Seite lädt Sie dann so etwas tun könnte:

var init = { startingSlide: 1 }; // i.e. second slide, the indices are zero-based 
$('whatever').cycle($.extend(init, the_name_of_your_global_default_options)); 

Sie würden nur arrangieren müssen für init eine sein leeres Objekt literal, außer wenn Sie startingSlide einstellen mussten. Wenn sich .cycle() irgendwo außerhalb Ihrer Seite befindet, können Sie eine Variable für seitenspezifische Optionen und $.extend() reservieren, wobei .cycle() aufgerufen wird. Zum Beispiel in Ihrer Seite, können Sie etwas tun:

app_name_space.page_cycle_opts = { startingSlide: 1 }; 

und dann ab Art und Weise in der JavaScript-Datei, die den Zyklus Zeug ist bindend:

app_name_space.page_cycle_opts = app_name_space.page_cycle_opts || { }; 
$('whatever').cycle($.extend(app_name_space.page_cycle_opts, default_options)); 

Ich app_name_space als mit Platzhalter für den globalen Namespace, den Ihre Anwendung bereits verwendet, um Namenskonflikte zu vermeiden. Wenn Sie mit mehrer Zyklen Instanzen auf einer einzigen Seite zu tun haben, dann würden Sie indizieren page_cycle_opts durch das Element ID wollen, zum Beispiel:

app_name_space.page_cycle_opts['X'] = { startingSlide: 1 }; 

und dann weg an anderer Stelle:

$('whatever').each(function() { 
    $(this).cycle($.extend(
     app_name_space.page_cycle_opts[this.id] || { }, 
     default_options 
    )); 
}); 

der Grund Die Idee besteht darin, die globalen Konfigurationsoptionen als eine Reihe von Standardeinstellungen zu betrachten und dann seitenspezifische Überschreibungen durch einen genau definierten und dokumentierten Mechanismus zuzulassen.

Eine langatmige Antwort auf eine langatmige Frage. Hoffnung ist klar und nicht verwirrend.

+0

Wow, vielen Dank für die tolle Antwort.Danke dass du dir die Zeit nimmst. Es ist sehr klar und ich fummle jetzt damit. Das wird für mich funktionieren. Vielen Dank, dass Sie mich mit der Funktion $ .extend vertraut gemacht haben. Ich wusste, dass es einen Weg geben musste, um Eigenschaften hinzuzufügen, konnte einfach nicht herausfinden, wie. – Dmase05

+0

@ DMase05: BTW, '$ .extend()' modifiziert sein erstes Argument, daher sollten Sie ein leeres Objekt als erstes Argument angeben, wenn das wichtig ist: 'x = $ .extend ({}, a, b, ...) ; '. jQuery hat viele kleine Hilfsprogramme, von denen die Leute nicht zu wissen scheinen: http://api.jquery.com/category/utilities/. Prost. –