2013-06-10 4 views
3

내가는 jQuery를

가 참조하는 함수에 인수로 배열을 전달하기 위해 노력하고 함수에 인수로 배열을 전달 인수를 배열이 아닌 문자열로 읽는 중입니다. 함수에서 배열을 인수로 전달하는 방법은 무엇입니까?

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

}); 

편집 : 바이올린 구문 오류를 수정하도록 업데이트되었습니다.

+0

문자열이 아닌 배열을 전달합니다. 질문을 명확히 할 수 있습니까? –

+0

방금 ​​알아 챘습니다. 나는 곧 업데이트 할 것이다. – Sanya

답변

3

이렇게하면 안됩니다. 동적으로 변수를 호출하지 마십시오. 즉 변수의 이름을 모르는 채로 변수를 호출하려고하지 마십시오. 어떤 상황에서는 푸시로 할 수 있지만 나쁜 생각입니다. 나는 많은 성능 향상을 위해 this.id$(this).attr('id')을 변경 한

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

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

NB를 :

여기에 가장 좋은 방법은 동적 객체에서 값을 얻기 위해 객체와 대괄호 표기법을 사용하는 것입니다.

+0

감사합니다.'많은 성능 향상'_ * 기침 * _ –

+1

@ FrédéricHamidi "함수 호출". 분명히 사물의 거대한 계획에서 상대적으로 사소한 것입니다. [비교] (http://jsperf.com/dom-property-vs-jquery-attr) – lonesomeday

+0

감사. 배열이 다차원 일 경우 어떻게 될까요? var arr1 = [{ "x1": "one", "x2 :"two ","x3 ":"three "}, {"x4 ":"four ","x5 ":"five ","x6 " "6"}]; – Sanya

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

}); 
+0

고맙습니다. 배열이 다차원 인 경우 어떻게할까요? var arr1 = [{ "x1 ":"one ","x2 : "two", "x3": "three"}, { "x4": "four", "x5": "five", "x6": "six"}]; – Sanya

+0

'array [myVal] [2]'를'arrays [myVal] [0] [key]'또는'arrays [myVal] [1] [key]'로 바꿔주세요. –

+0

고맙습니다. 당신은 매우 도움이된다 – Sanya

1
나중에 검색 할 수 있습니다 (나쁜 관행 또는 윈도우 범위) 공통 객체 배열 변수를 저장해야

:

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

이 문자열이 변수를 검색 할 수 이름 :

var myval = $(this).attr('id'); 
showstuff(commonObject[myval]); 
+0

고대의 모호한 브라우저를 지원하지 않는다면 요즘 빈 객체 리터럴'{}'대신'new Object()'를 계속 사용하는 진짜 이유가 없다. –