Frage

HintergrundIch habe zwei ausgewählte Formfelder miteinander verkettet: Dauer und Frequenz. 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.

Zum Beispiel sind die Frequenzoptionen "Tag", "Neutag" und "Woche". Wenn ich "Tag" auswähle, ändern sich die Frequenzoptionen in "5 Tage", "15 Tage" und "30 Tage".

ProblemDas Problem kommt, wenn der Benutzer das Formular mit Fehlern einreicht, das Formular mit allen Formularfeldern wiedergegeben und die Fehler hervorgehoben werden-mit Ausnahme des Frequenzauswahlfeldes-dessen Optionen dynamisch generiert werden. Es wird nicht hervorgehoben und die Optionen sind die Standardoptionen.

Gibt es eine Möglichkeit, diese Optionen neu zu bevölkern, wenn der Benutzer einen Fehler einreicht? Wir machen eine ganze Reihe von JavaScript -Validierung, daher sollte diese Situation nicht so oft passieren, möchte aber für die Benutzer ein so schmerzloses Erlebnis wie möglich machen.

CodeIch benutze JQuery und ein Jquery -Plugin namens Cascade, um die beiden Felder zusammenzubringen. (http://plugins.jquery.com/project/cascade)

Hier ist mein benutzerdefiniertes JavaScript.

Dieses Skript generiert 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 dies ist das Skript, das die Erzeugung der ausgewählten Optionen auslöst:

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

Die FrageIrgendwelche Gedanken darüber, wie die dynamisch generierten Frequenzoptionen zum Umpopulieren werden, wenn das Formular mit Fehlern an den Browser zurückgegeben wird? Könnte entweder das Cascade -Plugin verwenden, das ich derzeit verwende, oder eine andere Methode?

Hilfe wird sehr geschätzt. :-)

War es hilfreich?

Lösung

Ich bin mit diesem Plugin nicht vertraut, aber könntest du das nicht einfach feuern change() Ereignis von #duration und/oder #frequency auf document.ready?

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

Ich bin mir ziemlich sicher, dass das Skript, dass das Skript das tut, an das Change -Ereignis des SELECT -Ereignisses des SELECT (zumindest standardmäßig) verbindet, damit das Plugin das Plugin auslösen sollte, um seine Magie zu bearbeiten ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top