2009-04-30 13 views
4

Hintergrund Ich habe zwei Auswahlfelder miteinander verkettet: Dauer und Häufigkeit. Wenn der Benutzer eine Frequenz auswählt, werden die Daueroptionen dynamisch eingefügt. Es gibt Standardoptionen, aber diese sind nur so, dass das Feld nicht leer ist, wenn der Benutzer es erweitert.Wie werden dynamisch generierte Optionen für ein Auswahlfeld wieder aufgefüllt?

Zum Beispiel sind die Häufigkeitsoptionen "Tag", "anderer Tag" und "Woche". Wenn ich "Tag" wähle, ändern sich die Häufigkeitsoptionen in "5 Tage", "15 Tage" und "30 Tage".

Problem Das Problem kommt, wenn der Benutzer das Formular mit Fehlern einreicht, wird das Formular zurück mit allen Formularfeldern wieder aufgefüllt und die Fehler hervorgehoben - mit Ausnahme des Frequenzauswahlfeld - der Optionen sind dynamisch erzeugt. Es ist nicht markiert und die Optionen sind die Standardoptionen.

Gibt es eine Möglichkeit, dass diese Optionen erneut ausgefüllt werden können, wenn der Benutzer einen Fehler einreicht. Wir machen ziemlich viel JavaScript-Validierung, daher sollte diese Situation nicht so oft passieren, aber wir möchten, dass ein Fehler so schmerzlos wie möglich für die Benutzer gemacht wird.

Code Ich benutze jquery und ein jquery-Plugin namens Kaskade, um die beiden Felder miteinander zu verketten. (http://plugins.jquery.com/project/cascade)

Hier ist meine benutzerdefinierte JavaScript.

Dieses Skript erzeugt die Liste der Optionen:

var list1 = [ 
    {'When':'86400','Value':' ','Text':' '}, 
    {'When':'172800','Value':' ','Text':' '}, 
    {'When':'604800','Value':' ','Text':' '}, 
    {'When':'86400','Value':'432000','Text':'5 days'}, 
    {'When':'86400','Value':'1296000','Text':'15 days'}, 
    {'When':'86400','Value':'2505600','Text':'30 days'}, 
    {'When':'172800','Value':'1296000','Text':'15 days'}, 
    {'When':'172800','Value':'2505600','Text':'30 days'}, 
    {'When':'172800','Value':'3888000','Text':'45 days'}, 
    {'When':'604800','Value':'2505600','Text':'4 weeks'}, 
    {'When':'604800','Value':'3715200','Text':'6 weeks'}, 
    {'When':'604800','Value':'4924800','Text':'8 weeks'} 
]; 

function commonTemplate(item) { 
    return "<option value='" + item.Value + "'>" + item.Text + "</option>"; 
}; 

function commonMatch(selectedValue) { 
    return this.When == selectedValue; 
}; 

Und das ist das Skript, das die Erzeugung der Auswahloptionen löst:

jQuery("#duration).cascade("#frequency",{ 
    list: list1,    
    template: commonTemplate, 
    match: commonMatch   
}) 

Die Frage Irgendwelche Gedanken darüber, wie man Abrufen der dynamisch generierten Häufigkeitsoptionen zum erneuten Auffüllen, wenn das Formular mit Fehlern an den Browser zurückgegeben wird? Könnte ich entweder das Kaskaden-Plugin verwenden, das ich gerade benutze, oder eine andere Methode?

Hilfe wird sehr geschätzt. :-)

+0

+ 1 für eine gut formulierte Frage von einem ersten Benutzer. Es ist fast zu selten ein Ereignis um diese Teile ... –

+0

Danke, Paolo. :) Ich wollte wirklich sicherstellen, dass ich eine gute Antwort bekommen habe, also habe ich eine gründliche Frage gestellt. Hoffe ich bin nicht zu übertrieben gegangen. – Rick

Antwort

2

Ich bin nicht mit diesem Plugin vertraut, aber konnten Sie nicht gerade das change() Ereignis von #duration und/oder #frequency auf document.ready feuern?

$(document).ready(function() { 
    $('#duration').change(); 
    $('#frequency').change(); 
}); 

Ich bin ziemlich sicher, dass das alles Skript tut Zeug zum Änderungsereignis der Auswahl (standardmäßig zumindest) ist bindend, so dass das Plugin auslösen sollte seine Magie arbeiten ...

+0

Das hört sich so an, als würde es funktionieren und daran arbeiten. Das Problem scheint nun jedoch zu sein, dass die Frequenz, die nicht dynamisch generiert wird, nicht neu gefüllt wird. :(Bin bei der Fehlersuche und dann sehen, ob Ihre Lösung funktioniert. – Rick

+0

Das tat es. Danke, Paolo. :) – Rick

+0

Obwohl, eine letzte Notiz, ich musste nur .change() die # frequency. – Rick

Verwandte Themen