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')したNB 。this.id

于 2013-06-10T22:04:36.167 に答える
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 に答える
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 に答える