如何根据选择值将变量传递给函数?

时间:2016-06-28 19:31:27

标签: javascript jquery function variables

为了这个问题,这是我遇到的问题的简化版本。

如果我的HTML中有<select>

<select>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
</select>

然后我的JS:

var a,b = 12;
var c1,d1,e1,
    c2,d2,e2,
    c3,d3,e3,
    c4,d4,e4,
    c5,d5,e5,
    c6,d6,e6 = // Assigned individually from loop. NOT actual code.


function myFunction(a,b,c,d,e){
  // do something with a,b,c,d,e
}

$('select').on('change', function() {
  var id = $(this).val();
  c = c+id;
  d = d+id; 
  e = e+id;
  myFunction(a, b, c, d, e);
}

在上面的代码中,如果我选择选项3,我想传递函数变量c3,d3,e3。

如何分配&#39; 3&#39;从id到传递的变量?这段代码的选择部分有什么问题?

请帮忙。感谢。

问题#2:继续@ David的回答

如果我按照你建议的方式构建一个对象数组。

destinations = [
  {id:'123', title:'London',    lat:'1.52121' , lng:'-1.3423423', content:'a string'},
  {id:'456', title:'Paris',     lat:'1.52121' , lng:'-1.3423423', content:'a string'},
  {id:'634', title:'Amsterdam', lat:'1.52121' , lng:'-1.3423423', content:'a string'}
]

如果我想要迭代数组并为每个对象创建GoogleMaps标记的变量,我该怎么做

$.each(destinations, function(i, ob) {
  $.each(ob, function (key, value) {
    var marker[ob.id] = new google.maps.Marker({
      draggable: false,
      map: map,
      icon: dotMarker,
      position: {lat: ob.lat, lng: ob.lng}
  }); 
});

2 个答案:

答案 0 :(得分:3)

考虑更合理的数据结构而不是所有这些个体变量。从对象开始:

{
  c: '',
  d: '',
  e: ''
}

毕竟,如果cde应该以某种方式一起解释并表示已连接的内容,那么这听起来像是您试图描述的对象

然后只有一个该对象的数组:

var myObjects = [
    { c: '', d: '', e: '' },
    { c: '', d: '', e: '' },
    { c: '', d: '', e: '' },
    // etc.
]

这更符合您的评论建议:

  

//从循环

动态分配的值

那么您的选项值包含的只是您要查找的元素的索引

<select>
  <option value="0">1</option>
  <option value="1">2</option>
  <option value="2">3</option>
  <option value="3">4</option>
  <option value="4">5</option>
  <option value="5">6</option>
</select>

您可以根据该索引获取元素:

var id = $(this).val();
var myObject = myObjects[id];
myFunction(a, b, myObject.c, myObject.d, myObject.e);

可能 可以做更多的事情来改善这里的事情,但是这个例子的人为设想使它在语义上变得模糊。这里的要点是将逻辑放入你正在使用的结构中,而不是用复杂的逻辑来解释缺乏结构。

  

“智能数据结构和哑码比其他方式更好。”     - Eric S. Raymond,“大教堂和市集”

答案 1 :(得分:0)

您的代码有很多改进,但如果您想使用当前结构,那么您可以执行类似的操作。

var a,b = 12; //note: all variables are defined in global (window) scope
var c1,d1,e1,
    c2,d2,e2,
    c3,d3,e3,
    c4,d4,e4,
    c5,d5,e5,
    c6,d6,e6 = // Assigned individually from loop. NOT actual code.

$('select').on('change', function() {
  var id = $(this).val(); //let it be 3
  var c = window['c' + id]; //c3
  var d = window['d' + id]; //d3
  var e = window['e' + id]; //e3
  myFunction(a, b, c, d, e);
}