需要使用HTML选择'选项'的'value'作为数组名称

时间:2013-07-21 07:10:41

标签: javascript html

我有几个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。

1 个答案:

答案 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];

但如果他们是全局的,我会建议重构,所以他们不是全局的。 : - )