1

我有几个 JavaScript 数组:

 var someMotionToys = ["cars", "bikes", "surfboards", "skis"];
 var immobileToys = ["xbox", "guitar", "paintbrush", "laptop", "crossword puzzles"];
 var rareToys = ["ironmaiden", "pogostick", "lawndarts"];

我有一个 HTML“选择”标签,如下所示:

     <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);
     }

我得到的“长度”值是“someMotionToys”这个词的长度,尽管它是我的数组的名称,但它也是 html“选择”框中的“值”的名称。换句话说,我看到的 'length' 值为 14('someMotionToys' 中的字母数),但我需要 'length' 为 4,即我的 'someMotionToys' 数组中的元素数。我需要将 HTML 选择框中的这个“值”“连接”到我的数组。我想将我的数组名称存储在选择框中的“值”字段中,然后在 onchange 处理程序中轻松提取“值”并快速引用正确的数组。

如何“强制”从 HTML“选择”中的值中获取的文本字符串,以便将其映射到我的数组名称?

我需要在我的网页上的几个“选择”中存储数组名称——我的计划是将数组名称存储在“选择”框中每个选项的“值”中。

我怎样才能使这项工作?顺便说一句,我没有使用 jQuery 的计划。

4

1 回答 1

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"]例如,works)的结果,包括变量引用。

如果这些数组是在全局范围内声明的,那么它们已经是一个对象的属性——全局对象,您可以使用以下方法引用它window

var theArray = window[theToySelection];

但如果它们是全局变量,我会建议重构,这样它们就不是全局变量。:-)

于 2013-07-21T07:17:07.160 回答