2013-05-02 2 views
0

에서 매개 변수로 개체 및전달 나는 자바 스크립트 함수에 매개 변수로 객체를 전달하려는 자바 스크립트 함수

나는 .. 사실 innerHTML을에서 함수 함수를 호출 스피, 다음으로 시도했다

var tempObj={ 
     result:results, 
     jsobj:jsObj 
    } 

    str +='<input type="button" onclick="buildCstrWiseChart('+tempObj+')" value="View" class="btn btn-info">'; 

그러나이 didnt한다 나를 위해 같은 오류가 스피 작동 ..

SyntaxError: missing ] after element list 
[Break On This Error] 

buildCstrWiseChart([object Object]) 

할 수있는이 어떤 하나의 도움 ..

+4

유효한 자바 스크립트 코드이며 작동해야하며, 더 많은 코드를 보여줘야합니다. 어딘가에 다른 오류가 있다고 생각하십시오. – x4rf41

+0

'someFunc'는 무엇을합니까? 그리고 어떻게/어디에서 부르는거야? –

+2

전체/실제 코드, 특히 목록이있는 파트를 게시해야합니다.구문 오류에는 줄 번호가 있어야합니다. – Bergi

답변

4

개체를 문자열 인 것처럼 취급하고있었습니다. 그것은 오류입니다.

tempObj은 전역 변수입니까? 그래서, 단지

str +='<input type="button" onclick="buildCstrWiseChart(tempObj)" value="View" class="btn btn-info">';` 
+0

+1 글로벌이 아닌 경우 OP는 객체가 인라인 핸들러 속성에서 도달 할 수있게 전역 적으로 액세스 가능하게해야합니다. –

+0

고마워요. 그 작업 .. 처음에 시도했는데 ..하지만 그때는 작동하지 않았습니다 ... 그렇습니다. 변수가 전역 적으로 선언되었을 때 잘 작동합니다. 왜 변수를 전역 변수로 선언해야합니까? – sasi

+0

@squint와 마찬가지로, 'onclick' 핸들러는'tempObj'가 무엇인지를 알아야합니다. 그래서'tempObj'가 전역 변수가 아니라면 핸들러는 그것이 무엇인지 알지 못할 것입니다. 말이된다? –

-1

음, 문제는 귀하의 기능에 있습니다 someFunc.

다음 예

완벽하게 잘 작동 :

var f = function (el){ 
    alert(el) 
}; 

var x = {a: "hey", b: "ho"}; 

그런 다음

f('hi'); 
f(x); 

이 오류를 제공하지 않습니다.

0

NB : OP가 원래 게시 이후 게시 된 코드를 변경했습니다.

내가 문제를 내기 줄이 함께 :

...onclick="buildCstrWiseChart('+tempObj+')"... 

나는 tempObj 문자열 이외의 것을하지 않을 때 문제가 해결 거라고 생각하지 않습니다. 어쨌든 위험한 것 같습니다.

정말로해야 할 일은 실제 객체를 문자열에 넣는 대신 그것을 참조하는 값을 넣고 (아마 id : object 사전을 작성) id를 데이터 속성으로 포함하는 것입니다 . 그런 다음 onclick 메서드에서 해당 특성을 검색하고 제공된 ID에 대한 개체를 찾을 수 있습니다.

+3

우리는 운전자가 downvoter을 가지고있는 것처럼 보입니다 ... – PhonicUK

+1

당신은 대답이 아니라는 것을 알기에 충분한 담당자가 있습니다. 주어진 코드가 작동한다는 것을 설명하는 주석입니다. –

+1

"그것은 나를 위해 일한다"는 질문에 대한 정확한 답이 아니므로, downvotes가 놀랄 일이 아니어야합니다. –

2

을 할 경우 객체의 문자열 표현은 HTML을 구축 할 때 당신이 그것을 연결하는 시도 할 때 단지 [object Object] 그래서 유효한 HTML하지

onclick="buildCstrWiseChart([object Object])" 

로 끝날 것입니다. [object 부분은 배열의 시작 부분으로 파싱되지만 Object] 부분은 유효한 배열 구문이 아닙니다.

$('<input type="button"/>', { 
    value: 'View', 
    className: 'btn btn-info' 
}).click(function() { 
    buildCstrWiseChart(tempObj); 
}); 

그런 다음 어떤 포함에 그 요소를 추가 할 .append() 또는 .appendTo() jQuery를 기능 중 하나를 사용하십시오

차라리 HTML 문자열을 구축하는 것보다 좋을 것

대신 실제로 DOM 요소를 만들 수 jQuery를 사용 요소를 포함 할 수 있습니다.

+1

나는이 답변이 다른 하나가 문제를 해결하기 위해 꽤 나쁜 방법을 사용하고 있기 때문에 약간의 upvotes를받을 자격이 있다고 생각한다. 첫 번째 : 핸들러를 인라인으로 선언하지 말고 둘째 : 변수를 액세스 할 수 없기 때문에 변수를 전역 범위에 두지 마십시오. 최소한 전역 개체로 래핑하십시오. – HMR

관련 문제