通过选择标记值查找变量

时间:2016-02-09 21:35:26

标签: javascript jquery

我有一个select标签,它有一些值(实际上很多)我将每个选项的值分配给一个变量并使用" switch"从JSON中选择我需要的数据的方法。它实际上与该方法一起正常工作,但正如我上面提到的,我有很多数据,并希望改变无穷无尽的"切换"对于较短的" if / else"声明。

我用于数据的变量与从" select"中取得的值完全相同。标签,但我无法弄清楚如何将相应的数据变量传递给我想要使用的函数。

HTML

<select id="select" class="select-data" name="selector">
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
    <option value="val3">Value 3</option>
    ...
    ...
    ...
    <option value="val100">Value 100</option>
</select>

JQuery的

$(document).ready(function(){
    $(".select-data").change(function(){
        var select = $("select[name=selector]").val();
        switch (select) { 
        case 'val1': 
            buildTable(var1);
            break;
        case 'val2': 
            buildTable(var2);
            break;
        case 'val3': 
            buildTable(var3);
            break;
        ...
        ...
        ...     
        case 'val100': 
            buildTable(var100);
            break;
        };
    });
    function buildTable(data){
        $.each(data, function(index, value) {
            $('.value-table').find('.code').eq(index).text(value.product);
        });
    }
    buildTable(val1);
});  

var var1= [
{"product":"prod1"},
{"product":"prod2},
{"product":"prod3"}]; 

var var2= [
{"product":"prod1"},
{"product":"prod2},
{"product":"prod3"}]; 

var var3= [
{"product":"prod1"},
{"product":"prod2},
{"product":"prod3"}]; 

...
...
...

var var100= [
{"product":"prod1"},
{"product":"prod2},
{"product":"prod3"}]; 



/*=================Desired-Function=================

$(".select-data").change(function(){
    var select = $("select[name=selector]").val();
    if(select == select???){
        buildTable(select???);
    }
});

*==================================================/

1 个答案:

答案 0 :(得分:1)

选项1 使用array存储var1-var100,并将每个选项的值设置为数组的索引。

&#13;
&#13;
var vals = [
  [{
    "product": "prod1"
  }, {
    "product": "prod2"
  }, {
    "product": "prod3"
  }],
  ...
  ...
  ..., [{
    "product": "prod1"
  }, {
    "product": "prod2"
  }, {
    "product": "prod3"
  }]
];

$(".select-data").change(function() {
  var selectedValue = $("select[name=selector]").val();
  buildTable(vals[selectedValue - 1])
});
&#13;
<select id="select" class="select-data" name="selector">
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
  ... ... ...
  <option value="100">Value 100</option>
</select>
&#13;
&#13;
&#13;

选项2

使用data属性将数据存储在option标记

&#13;
&#13;
$(".select-data").change(function() {
  var selectedValue = $.parseJSON($("select[name=selector]").data('json-value'));
  buildTable(selectedValue);
});
&#13;
<select id="select" class="select-data" name="selector">
  <option value="1" data-json-value="[{prod1:'prod1',prod1:'prod1',prod1:'prod1'}]">Value 1</option>
  <option value="2" data-json-value="[{prod1:'prod1',prod1:'prod1',prod1:'prod1'}]">Value 2</option>
  <option value="3" data-json-value="[{prod1:'prod1',prod1:'prod1',prod1:'prod1'}]">Value 3</option>
  ... ... ...
  <option value="100" data-json-value="[{prod1:'prod1',prod1:'prod1',prod1:'prod1'}]">Value 100</option>
</select>
&#13;
&#13;
&#13;

注意:$.parseJSONparseInt可能是冗余呼叫。