2009-04-30 11 views
4

背景 私は2つの選択されたフォームフィールドを一緒にチェーンしています:期間と頻度。ユーザーが周波数を選択すると、期間オプションが動的に挿入されます。デフォルトのオプションがありますが、ユーザーがフィールドを展開したときにフィールドが空でないようにするだけです。選択フィールドに動的に生成されたオプションをどのように再埋め込みしますか?

たとえば、頻度オプションは、「日」、「他の日」、および「週」です。 「日」を選択すると、頻度オプションが「5日」、「15日」、「30日」に変更されます。

問題 ユーザーがフォームがで返され、エラーが発生してフォームを送信するときに問題が来るすべてのフォームフィールドに再投入され、エラーが強調表示 - 周波数選択フィールドを除いて - そのオプション動的です生成される。強調表示されておらず、デフォルトのオプションがオプションです。

ユーザーがエラーを送信した場合、これらのオプションを再設定する方法はありますか。 GoogleではかなりのJavaScript検証を行っていますので、このような状況は頻繁に起こるべきではありませんが、ユーザーができるだけ苦労しないようにエラーを発生させたいと考えています。

コード 私はjqueryとjasceryという2つのフィールドをつなぎ合わせるためのプラグインを使用しています。 (http://plugins.jquery.com/project/cascade

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

このスクリプトは、オプションのリストを生成:質問 どのように上の任意の考えを

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

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

をそして、これは、選択オプションの生成をトリガーするスクリプトです動的に生成された頻度オプションを取得して、エラーが発生したフォームがブラウザに返されたときに再設定する私は現在使用しているカスケードプラグインを使用することも、他の方法を使用することもできますか?

大変助けになりました。 :-)

+0

+ 1回目のユーザーからの挨拶付き質問の場合は1です。これらの部分の周りのイベントは、あまりにもまれです。 –

+0

Thanks、Paolo。 :)本当に私は良い答えを持っていることを確認したかったので、徹底的な質問をしました。私はあまりにも船外に行っていないことを願っています。 – Rick

答えて

2

私はこのプラグインに慣れていませんが、change()というイベントを#durationおよび/または#frequencyというdocument.readyに発信することはできませんでしたか?

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

私は、すべてのスクリプトがやっているかなり確信しているが(少なくともデフォルトによる)選択の変更イベントへのものを結合され、その結果は、その魔法を動作するようにプラグインをトリガーする必要があります...

+0

これはうまく動作しているように聞こえます。しかし、問題は現在、動的に生成されない頻度が再設定されていないように見えます。あなたのソリューションがうまくいくかどうかを確認してみましょう。 – Rick

+0

それはありました。ありがとう、Paolo :) – Rick

+0

最後の注記ですが、私は#frequencyを.changeする必要がありました。 – Rick

関連する問題