4

背景 私には、期間と頻度という2つの選択されたフォームフィールドがチェーンされています。ユーザーが頻度を選択すると、期間オプションが動的に挿入されます。デフォルトのオプションがありますが、それらはユーザーがフィールドを展開したときにフィールドが空にならないようにするためのものです。

たとえば、頻度オプションは「日」、「その他の日」、「週」です。「日」を選択すると、頻度オプションが「5日」、「15日」、「30日」に変わります。

問題 ユーザーがエラーのあるフォームを送信すると、フォームが返され、すべてのフォームフィールドが再入力され、オプションが動的に生成される[頻度選択フィールドを除く]エラーが強調表示されます。強調表示されておらず、そのオプションがデフォルトのオプションです。

ユーザーがエラーで送信した場合に、これらのオプションを再入力する方法はありますか?私たちはかなりのJavaScript検証を行っているので、このような状況はそれほど頻繁には発生しないはずですが、ユーザーにとって可能な限り苦痛のないエクスペリエンスでエラーを取得できるようにしたいと考えています。

コード 2つのフィールドをチェーンするためにjqueryとcascadeと呼ばれるjqueryプラグインを使用しています。(http://plugins.jquery.com/project/cascade

これが私のカスタムJavaScriptです。

このスクリプトは、オプションのリストを生成します。

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; 
};

そして、これは選択オプションの生成をトリガーするスクリプトです。

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

質問 フォームがエラーでブラウザに返されたときに、動的に生成された頻度オプションを再入力する方法について何か考えはありますか?現在使用しているカスケードプラグインまたは他の方法を使用できますか?

ヘルプは大歓迎です。:-)

4

1 に答える 1

2

私はこのプラグインに詳しくありませんが、document.readyのand/orでchange()イベントを発生させることはできませんか?#duration#frequency

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

スクリプトが行っていることはすべて、(少なくともデフォルトでは) select の変更イベントにバインドしているため、プラグインが魔法のように機能するようになるはずです...

于 2009-04-30T18:29:12.640 に答える