2012-07-04 2 views
4

innerHTML을 사용하는 JavaScript 함수에 동적 매개 변수를 전달하는 데 문제가 있습니다. innerHTML을 사용하여 JavaScript 함수에 동적 매개 변수 전달

var name = "test"; 

frm.innerHtml = '<button name="close" id="close" title="Cancel" type="button" 
    onclick="closeTab('+name+');">Return</button>'; 

나는 closeTab() 함수의 코드를 디버깅

name 변수에 의해 지정된 매개 변수는 null입니다 : 아래에 포함

내가 사용하고있는 현재의 코드입니다.

innerHTML 속성을 수정하는 동안 값의 선언에 문제가 있다고 생각합니다.

도움을 주시면 감사하겠습니다.

감사

+0

나는 단순히 따옴표없이 변수 이름을 사용합니까? 감사합니다 – Coder

+0

당신이 변수로 이름의 값을 사용하여 인용문을 추가하십시오. – Novak

+0

DOM을'document와 같이 사용해야합니다.'innerHtml'을 설정하는 대신 createElement'와 같은 것들을 사용합니다. –

답변

-1

는 단순히 onclick을 사용 :이 문제를 해결하기 위해, 대신 아래 입증 된 바와 같이 싸는와 작은 따옴표로 변수를 탈출하여 수행되는 변수의 문자열로 값을 전달해야한다 closeTab (name); "> innerHTML에서 작동했습니다. 나는 coz 이름이 글로벌 변수라고 생각한다.

+0

이 컨텍스트에서 name을 사용하면 문자열이 아니라 변수로 closeTab() 함수에 전달됩니다. 이상적으로이 컨텍스트에서 함수를 실행하려면 전역 변수가 아니라 문자열을 받아야합니다. – RobB

3

귀하의 결과 코드는 다음과 같습니다

<button ... onclick="closeTab(test);">Return</button> 

당신이 무엇을 잘못 볼 수 있을까요? test은 실제로 문자열로 의도 할 때 변수로 처리됩니다.

JSON.stringify을 사용하여 PHP에서 변수과 같은 변수를 만들 수 있지만이 경우에도 따옴표를 이스케이프 처리해야합니다. 따라서 :

JSON.stringify(test).replace(/"/g,"&quot;") 

그냥 test 대신 버튼에 사용하십시오.

+0

나는 단순히 onclick = "closeTab (name);">을 사용했습니다. – Coder

+1

'name'은 전역 변수이기 때문에 작동하지만, 더 복잡해지면 "불가 해"깨질 것입니다. –

3

동적 선언은 매개 변수의 값 대신 매개 변수를 변수로 전달합니다. "=

var name = "test"; 

frm.innerHtml = '<button name="close" id="close" title="Cancel" type="button" 
     onclick="closeTab(\''+name+'\');">Return</button>'; 
+0

큰 따옴표를 사용했는데, 그 중 하나는 \ '... gj, 도와 줬습니다. –

0

사용하여 DOM은 :

var name="test"; 
var el = document.createElement("button"); 
el.name = "close"; 
el.id = "close"; 
el.title = "Cancel"; 
el.type = "button"; 
el.onclick = function() { // an inline function that will be executed when el is clicked 
    closeTab(name);  // `name` here contains `"test"` 
}; 
frm.appendChild(el); 

정말 지저분 그대로 innerHTML을 과도하게 조장하지 않으며, 언젠가 속도가 느려질 수 있습니다.

0

당신의 HTML을 가정입니다 -

<form id='frm'> 

</form> 

귀하의 JS가 있어야한다 -

var name = "test"; 
var innerHtml = "<button name='close' id='close' title='Cancel' type='button'>Return</button>"; 
$("#frm").html(innerHtml); 
$("#close").attr("onclick","javascript:closeTab('"+name+"');"); 

확인이 아웃 - http://jsfiddle.net/arindam006/avgHz/1/

innerHTML을가 아니지만 이것은,이를 달성하기 가장 깨끗한 방법입니다 위에 제시된 모든 사람들이 그것을 행할 수있는 적절한 방법.