如何根据选择值将变量传递给函数?
为了这个问题,这是我遇到的问题的简化版本。如何根据选择值将变量传递给函数?
如果我在我的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。
如何将id从'3'分配给传递的变量?这段代码的选择部分有什么问题?
请帮忙。谢谢。
问题#2:@大卫的回答
继如果我建立在你建议的方式对象的数组。
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'}
]
如果我想要再通过遍历数组和谷歌地图标记与每个对象创建变量,我怎么
$.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}
});
});
考虑一个更合理的数据结构,而不是所有的个体变量。启动与对象:
{
c: '',
d: '',
e: ''
}
毕竟,如果c
,d
和e
应当以某种方式来解释一起,代表东西是连接,那么这听起来像你想描述一个对象。
这时正好有一个对象的数组:
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);
有可能更可以做在这里改善的事情,但本例的人为性质使得它在语义含糊。这里的要点是把逻辑放入你正在使用的结构中,而不是用复杂的逻辑来解释缺少结构。
“智能数据结构和哑代码的工作方式比其他方式要好得多。”
- 埃里克雷蒙,“大教堂和市集”
谢谢。我明白你的意思。更好。 :D –
Hi @David和其他人, 如果您不介意,还有其他问题: –
我已经添加了第二个问题,涉及您的答案。如果你有时间,请看看。请参阅主要问题主体中的问题#2更新。非常感谢。 –
有许多改进你的代码,但如果你想使用目前的结构,那么你可以做这样的事情。
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);
}
首先,我会用数组或对象来保存所有的值,并非所有的单个变量 – DelightedD0D
一个更合理的数据结构,好像是叫在这里。 'c','d'和'e'好像是它们形成一个对象,并且你需要这些对象的数组。然后你只需要该数组中的第三个元素。 – David
像这样的东西可能是去https://jsfiddle.net/otmegmnu/ –