使用下拉列表选择对象并使用重用变量

时间:2017-11-01 15:32:46

标签: javascript jquery

我想使用选择下拉列表来更改我的代码中其他位置使用的数据集,但我无法弄清楚如何进行切换...我尝试将var master更改为所选选项的值,但我无法让它发挥作用!

我想要达到的最终结果是能够重用变量' master'将不同的数据集插入图表 - 基于选择。

例如 - 我想要所有对'#master;'使用所选数据集中的数据进行更新。

HTML

     <select id='chart-selector' name='chart-selector'>
        <option value='pre2010All'>Total Installations</option>
        <option value='pre2010Res'>Residential</option>
        <option value='pre2010NonRes'>Non Residential</option>
        <option value='pre2010Util'>Utiltiy</option>
     </select>

JS

      var master = [];

      $('select[name="chart-selector"]').change(function(){             
            master = $(this).val();
            console.log('Data Set:' +master.CA);
      });     


    // Pre 2010 //
    var pre2010All = {CA:"88901", AZ:"48420", ID:"53868", NY:"2322"};
    var pre2010Res = {CA:"2", AZ:"4", ID:"5", NY:"6"};
    var pre2010NonRes = {CA:"56", AZ:"34", ID:"45", NY:"36"};
    var pre2010Util = {CA:"16", AZ:"14", ID:"15", NY:"16"};

    // 2010 //
    var Y_2010All = {CA:"82901", AZ:"49420", ID:"56868", NY:"2822"};
    var Y_2010Res = {CA:"5", AZ:"7", ID:"5", NY:"8"};
    var Y_2010NonRes = {CA:"56", AZ:"38", ID:"49", NY:"37"};
    var Y_2010Util = {CA:"17", AZ:"17", ID:"15", NY:"18"};

3 个答案:

答案 0 :(得分:4)

const datasets = { // Pre 2010 // pre2010All: {CA:"88901", AZ:"48420", ID:"53868", NY:"2322"}, pre2010Res: {CA:"2", AZ:"4", ID:"5", NY:"6"}, pre2010NonRes: {CA:"56", AZ:"34", ID:"45", NY:"36"}, pre2010Util: {CA:"16", AZ:"14", ID:"15", NY:"16"}, // 2010 // Y_2010All: {CA:"82901", AZ:"49420", ID:"56868", NY:"2822"}, Y_2010Res: {CA:"5", AZ:"7", ID:"5", NY:"8"}, Y_2010NonRes: {CA:"56", AZ:"38", ID:"49", NY:"37"}, Y_2010Util: {CA:"17", AZ:"17", ID:"15", NY:"18"} }; 只是一个字符串,它不被视为另一个变量的名称。只要您认为需要动态变量,请使用其键为名称的对象。

console.log("Dataset:" + datasets[master].CA);

然后你可以做

ng-change

答案 1 :(得分:1)

为什么不将对象用于数据?

var type;

$('select[name="chart-selector"]').change(function(){             
      type = $(this).val();
      console.log('Data Set:' + data[type].CA);
});     

data = {};
// Pre 2010 //
data.pre2010All = {CA:"88901", AZ:"48420", ID:"53868", NY:"2322"};
data.pre2010Res = {CA:"2", AZ:"4", ID:"5", NY:"6"};
data.pre2010NonRes = {CA:"56", AZ:"34", ID:"45", NY:"36"};
data.pre2010Util = {CA:"16", AZ:"14", ID:"15", NY:"16"};

答案 2 :(得分:0)

如果您希望所有内容都引用master而不会更改,那么您就无法执行此操作:

master = $(this).val();

这会导致master指向不同值的不同内存地址。如果你希望它始终保持不变,那么你会想做类似的事情。

master.splice(0, master.length).push($(this).val());

这将从数组中删除所有元素,然后将新值推送到该数组。这里的要点是master指向的数组的内存地址永远不会改变。只有数组中的值。