2012-02-13 12 views
0

内の値とドロップダウンリストのオプションを更新するために、私は2つのドロップダウンボックスでWebフォームを持っている、と私は動的に基づいて、第2のボックスのオプションを更新する方法を探しています最初のものから選択します。どのように動的にサーバー生成配列

最初のボックスには、データの種類を表し、2番目のボックスは、選択されたタイプに関連付けられているデータベースのリストです。

私はここにスムーズに実行している基本的なコードを持っている:

var TypeA_DbSuffixList = ['Test1', 'Test2', 'Test3']; 
var TypeB_DbSuffixList = ['TestA', 'TestB', 'TestC']; 

function fill_dbSuffixList(){ 

    document.getElementById("dbSuffixList").options.length = 0; 
    var suffixMenu = document.getElementById("dbSuffixList"); 
    var dataFormat = document.getElementById("dataFormatType"); 
    var suffixList = dataFormat.value + "dbSuffixList"; 

    if (suffixList == 'TypeA_dbSuffixList') { 
     for(index in TypeA_dbSuffixList) { 
     suffixMenu.options[suffixMenu.options.length] = new Option(TypeA_dbSuffixList[index], index); 
     } 
    } 

    if (suffixList == 'TypeB_dbSuffixList') { 
     for(index in TypeB_dbSuffixList) { 
     suffixMenu.options[suffixMenu.options.length] = new Option(TypeB_dbSuffixList[index], index); 
     } 
    } 
} 

コード(選択は、データ型ボックスで行われるたびにアクティブ化)がオプションの既存のリストをクリアし、の選択した値に基づいてリストを再移入ことを「dataFormatType」ボックス。

私は、データベーステーブルの実際のリストは、ハードコーディングされていない、代わりにページの新しいデータベースが追加されるたびに繰り返し編集を避けるために、サーバーに以下の呼び出しで生成されることです直面している問題:

をこれらの呼び出しは、次のコードを返す
var TypeA_dbSuffixList = ${TypeA_dbSuffixList}; 
var TypeB_dbSuffixList = ${TypeB_dbSuffixList}; 

:上記のコードでは

var TypeA_dbSuffixList = [Test1, Test2, Test3]; 
var TypeB_dbSuffixList = [TestA, TestB, TestC]; 

を、初期関数は、未定義の変数として型の配列の各エントリを扱い、何も今までに、ドロップダウンリストに書き込まれません。

私は前にタイプAのためのループ「のために」、そしてデータ型のドロップダウンリストから、タイプAを選択すると、「アップル」、「オレンジ」、および「ぶどう」として返すに

var Test1 = "Apple"; 
var Test2 = "Orange"; 
var Test3 = "Grape"; 

を追加した場合TypeAの利用可能なデータベース

視覚的に、私は変更する必要があるものを参照してください。 [Test1を、Test2を、Test3は]戻っは、[ 'Test1の'、 'Test2を'、 'Test3は']にする必要があります。私はちょうどそれを変える方法について正確にわかりません、私が考えることができるすべてのウェブ検索を使い果たしました。

返される配列の形式を変更し、または既存のフォーマットを使用して、ドロップダウン選択として変数名を渡す代わりに変数の値を使用するいずれかの方法はありますか?

ご協力いただきまして誠にありがとうございます。私は自分自身で答えを探し続けるつもりですが、見つけたらここに投稿します。

答えて

0

をダウンロードして、以下を使用することができます二重引用符で囲んでください。

何らかの理由でこれが不可能で、純粋なJavaScriptソリューションが必要な場合は、JSP/ASP/PHP変数(使用しているフレームワークがわからない)を二重引用符で囲むことをお勧めします大括弧と空白の文字列を正規表現を使って入力し、コンマを区切り文字として使用して文字列配列に分割します。

は、だからあなたのJavaScriptで、この:

var TypeA_dbSuffixList = ${TypeA_dbSuffixList}; 

このなる:

var TypeA_dbSuffixList = "${TypeA_dbSuffixList}".replace(/[\[\]\s]/g,"").split(","); 
+0

サーバーサイドのコードを変更するだけでは問題にはなりませんが、そのコードはアプリケーションの他の部分で使用されるハッシュセットを生成します(フォーマットの原因であるかどうかは完全にはわかりません)。私は文字列配列を返す別のメソッドを追加することができると思うが、私は既に存在するコードを大文字にすることを望んでいた。これはかなりうまくいく。ありがとうございました。 – Mike

0

私はあなたのオブジェクトをエンコードするJavaScriptで使用されるものに、サーバー側の言語でデータを変換するための最良の方法は、JSONにあると思います。

var arr = ['abc', 'def', 'ghi'] ; 

これは、ことを確認してくださいます

は、私はあなたがサーバー上で使用してどのような言語わからないんだけど、PHPには、次の

var arr = <?php echo json_encode(array ('abc', 'def', 'ghi')); ?> ; 

を行うことができ、あなたの出力がされる文字列埋め込まれた新しい行、タブ、引用符は適切にエスケープされます。

JSP

あなたはJSPを使用しているが、あなたが持っているコードをよりJSP内部の速度やフリーマーカーのように見えると述べました。JSPでは、あなたは、私はきれいな解決策は、単一で囲まれた値を使用して、文字列の適切なJavaScriptの配列を生成するために、サーバー側でコードを変更することだと思うGson

var TypeA_dbSuffixList = <%= new Gson().toJson(TypeA_dbSuffixList) %>; 
+0

申し訳ありませんが、私は、サイトがJSPを実行していることを言及しませんでした。私はこれを念頭に置いておきますが、私はPHPで同様の設定をしているのを見たことがあります。ありがとうございました – Mike

+0

@Mike:JSPを行うのは難しくありません。http://stackoverflow.com/questions/3207092/what-is-the-jsp-equivalent-to-json-encode-in-php JSONエンコードソリューションは絶対に安全ですあなたが正しいとマークした答えは、soooo inelegantです。リストはtoString()を呼び出すことによってカンマ区切りになり、その周りに引用符を置き、splitメソッドを呼び出してすべての空白を削除します。また、埋め込み引用符は扱わないので、その場合は失敗します。 –

+0

私はWebアプリケーションがフリー・マーカーを使用していると思います。これはSpring Batchを使い果たしているため、ドキュメントにフリー・マーカーが頻繁に表示されています。正直言って、私はちょっとしたことがありますので、新しいものを学ぶときに機能をハッキングして改善しています。システムのセットアップのために、私はこのリターンで埋め込まれた引用符を見ることはないと思うが、決して言わない決心の精神で、私は間違いなくあなたの提案を見ていきます。 – Mike

関連する問題