5

简短版本: 如何使用 JavaScript 或 JQuery 将动态生成的多选框的选定值动态重新分配给默认值,因为在另一个更改(用户选择)时满足某些条件?

长版:

我有三个级别的多选器(州、都会区(又名 MSA)、县)动态地相互依赖,因此只有与所选州相交的县和都会区才会显示在相应的选择器中。

我的问题是,如果我在马里兰州选择一个 MSA,然后单击德克萨斯州,我的多选择器过滤器(参数化 MDX 查询)表会崩溃。

按照Pentaho的Catalina中的误差日志。

I would like to make it so that when a new state or group of states is selected that does not include the currently selected MSA or County, those selectors revert to the default ("All") value. 我是JQuery 和 JavaScript新手,所以我需要尽可能多的细节,同时还要考虑您的时间。


其他详细信息(如果需要):

MSA(都会区)选择器中的值会根据所选的州而变化,而县选择器取决于州和都会区。这一切都发生在一个 HTML 页面上(由 Pentaho 的 CDE Dashboard 生成)。每个的数据源是一个参数化的 SQL 查询(由 Pentaho 执行)。

When the "All" option for county and MSA is selected I can safely change the state selection: 在职的

When something other than the "All" option for county and MSA is selected I cannot change change the state selection without the dashboard crashing: 崩溃

来自 SQL 的数据是一个两列数组,带有一个 MDX 格式的值和一个明文标签,带有一个 All Value 来指定 MDX 父“All”值。

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 特定的,即因为我没有尝试直接更改选择器的值,而是为将选择器值存储在选择器本身中的参数设置了一个侦听器并进行了更改。

将下面的代码作为 JS 资源放在 Pentaho-CDE 中,然后使用@renaw 的 .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 回答