4

我正在尝试将数组作为参数传递给函数

见 -->小提琴<--

根据我的测试,该函数似乎将参数作为字符串而不是数组读取。如何将数组作为参数传递给函数?

HTML

<button id='arr1'>Click for Array 1</button>
<button id='arr2'>Click for Array 2</button><br/><br/>

<div id='mainstuff'>
    <p>When you click button, text should be added</p>
</div>

jQuery

$(document).ready(function() {
    var arr1 = ["one", "two", "three"];
    var arr2 = ["eleven", "twelve", "thirteen", "fourteen"];

    $('button').click(function() {
        var myval = $(this).attr('id');
        showstuff(myval);        
    });


    function showstuff(myval) {
        var x = "<p>The new text is " + myval[2] + "</p>";
        $('#mainstuff').append(x);
    }

});

编辑:小提琴已更新以修复语法错误。

4

3 回答 3

4

你不应该这样做。不要试图动态调用变量,即不知道它们的名字。在某些情况下,您可以一推就完成,但这是个坏主意。

这里最好的解决方案是使用对象和方括号表示法从对象中动态获取值:

var values = {
    arr1: ["one", "two", "three"],
    arr2: ["eleven", "twelve", "thirteen", "fourteen"]
}

$('button').click(function() {
    var myval = this.id;
    showstuff(values[myval]);        
});

请注意,我已更改$(this).attr('id')this.id以提高性能。

于 2013-06-10T22:04:36.167 回答
1

您不能传入要直接转换为对象的字符串值。而是将您的数组存储为键值对,然后尝试访问它们。

$(document).ready(function () {
    var arrays = {
         arr1 : ["one", "two", "three"],
        arr2 : ["eleven", "twelve", "thirteen", "fourteen"]
    };

    $('button').click(function () {
        var myval = $(this).attr('id');
        showstuff(myval);
    });


    function showstuff(myval) {
        var x = "<p>The new text is " + arrays[myVal][2] + "</p>;
        $('#mainstuff').append(x);
    }

});
于 2013-06-10T22:04:47.010 回答
1

您必须将数组变量存储在一个公共对象(或窗口范围,这是不好的做法)中,以便稍后检索:

var commonObject = new Object();
commonObject.arr1 = ["one", "two", "three"];
commonObject.arr2 = ["eleven", "twelve", "thirteen", "fourteen"];

然后通过字符串名称检索该变量:

var myval = $(this).attr('id');
showstuff(commonObject[myval]);
于 2013-06-10T22:14:47.400 回答