我有几个JavaScript数组:
var someMotionToys = ["cars", "bikes", "surfboards", "skis"];
var immobileToys = ["xbox", "guitar", "paintbrush", "laptop", "crossword puzzles"];
var rareToys = ["ironmaiden", "pogostick", "lawndarts"];
我有一个HTML'select'标签,如下所示:
<select id="toys" onchange="handleToysChoice(this)">
<option value="someMotionToys">toys in motion</option>
<option value="immobileToys">toys for inside</option>
<option value="rareToys">antique toys</option>
</select>
我在这里处理onchange JavaScript函数:
function handleToysChoice(theToysSelector)
{
var theToySelection = theToysSelector.value;
// AT THIS POINT -- assume the user selected 'toys in motion'
// so 'theToySelection' here is "someMotionToys" -- that is *also*
// the name of my array -- but the following tells me it's not
// referencing the array:
alert("The number of elements in the array " + theToySelection
+ " is: " + theToySelection.length);
}
我得到的'length'值是单词'someMotionToys'的长度,尽管是我的数组的名称,但它也是html'select'框中'value'的名称。换句话说,我看到的'length'值是14('someMotionToys'中的字母数)但我需要'length'为4,即'someMotionToys'数组中的元素数量。我需要HTML选择框中的这个“值”与我的数组“连接”。我想将我的数组名称存储在选择框中的“值”字段中,然后在onchange处理程序中轻松提取“值”并快速引用正确的数组。
如何“强制”从HTML“select”中的值中获取的文本字符串,以便将其映射到我的数组名称?
我需要在我的网页上的几个“选择”中存储数组名称 - 我的计划是将数组名称存储在“选择”框中每个选项的“值”中。
我该如何使这项工作?顺便说一句,我没有计划使用jQuery。
答案 0 :(得分:5)
执行此操作的最佳方法是使对象的数组属性:
var arrays = {
someMotionToys: ["cars", "bikes", "surfboards", "skis"],
immobileToys: ["xbox", "guitar", "paintbrush", "laptop", "crossword puzzles"],
rareToys: ["ironmaiden", "pogostick", "lawndarts"]
};
然后使用
var theArray = arrays[theToySelection];
...获取数组。在JavaScript中,您可以使用点表示法和文字(foo.bar
)或使用括号表示法和字符串(foo["bar"]
)来访问对象属性。在后一种情况下,字符串可以是任何表达式的结果(例如foo["b" + "a" + "r"]
起作用),包括变量引用。
如果这些数组是在全局范围内声明的,那么它们已经是对象的属性 - 全局对象,您可以使用window
引用它:
var theArray = window[theToySelection];
但如果他们是全局的,我会建议重构,所以他们不是全局的。 : - )