5

短いバージョン: JavaScriptまたはJQueryを使用して、動的に生成されたマルチセレクターボックスの選択された値を、別の変更(ユーザー選択)で特定の条件が満たされた場合にデフォルト値に動的に再割り当てするにはどうすればよいですか?

長いバージョン:

3 つのレベルのマルチセレクター (州、メトロ エリア (別名 MSA)、郡) が互いに動的に依存しているため、選択した州と交差する郡とメトロ エリアのみがそれぞれのセレクターに表示されます。

私の問題は、たとえばメリーランド州内の MSA を選択してテキサスをクリックすると、マルチセレクターがフィルター処理するテーブル (パラメーター化された MDX クエリ) がクラッシュすることです。

Pentaho の catalina.out のエラー ログを見ると、以前に選択した MSA を含まない状態を選択すると、MSA (Metro Area) セレクター パラメーターが未定義になるようです。

現在選択されている MSA または郡を含まない新しい州または州のグループが選択されたときに、それらのセレクターがデフォルト (「すべて」) の値に戻るようにしたいと考えています。私はJQuery と JavaScriptの初心者なので、時間に配慮しながら、できるだけ詳しく説明する必要があります。


必要に応じて追加の詳細:

MSA (Metro Area) セレクターの値は、選択された州によって変わります。County セレクターは、State と Metro Area に依存します。これはすべて、(Pentaho の CDE ダッシュボードによって生成された) HTML ページで行われます。それぞれのデータソースは、パラメータ化された SQL クエリです (Pentaho によって実行されます)。

郡と MSA の [すべて] オプションを選択すると、州の選択を安全に変更できます。 働く

郡と MSA の [すべて] オプション以外が選択されている場合、ダッシュボードがクラッシュせずに状態の選択を変更することはできません。 クラッシュ

SQL からのデータは、MDX 形式の値とクリアテキスト ラベルを含む 2 列の配列であり、MDX の親の「すべて」の値を指定するすべての値があります。

4

2 に答える 2

3

文脈をあまり説明しないと、具体的な答えを出すことができないので、以下から十分理解していただければ幸いです。

$('.one-input').change(function() {

    if ($(this).val() == 'something') {
        $('.other-input').val('default-value');
    }

});
于 2015-04-22T15:08:08.477 に答える
1

解決しました。多くのコードは Pentaho-CDE 固有のものでした。つまり、セレクターの値を直接変更しようとする代わりに、セレクター自体にセレクター値を格納するパラメーターのリスナーを設定し、それを変更したためです。

以下のコードを Pentaho-CDE に JS リソースとして配置し、@reraw の .change() 回答のバリアントを使用して、以前に選択した値が新しいものから消える場合に備えて、コンポーネントの選択した値をすべて動的にデフォルトに更新しました。利用可能なオプション セット。

$(document).ready(function() {
    // set default value to start with
    var all_msas = "[Metro Area]";
    var all_counties = "[County]";
    var all_zips = "[ZIP]";
   Dashboards.fireChange("msa_param", all_msas);
   Dashboards.fireChange("county_param", all_counties);
   Dashboards.fireChange("zip_param", all_zips);


    // what's happening on select
    $("#stateSelectorRow").on("change", function () {
            Dashboards.fireChange("msa_param", all_msas);
            Dashboards.fireChange("county_param", all_counties);
            Dashboards.fireChange("zip_param", all_zips);
    });

    $("#msaSelectorRow").on("change", function () {
        Dashboards.fireChange("county_param", all_counties);
        Dashboards.fireChange("zip_param", all_zips);
    });

   $("#countySelectorRow").on("change", function () {
       Dashboards.fireChange("zip_param", all_zips);
    });

})
于 2015-04-22T18:04:05.860 に答える