2012-07-04 100 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

你應該像使用'document一樣使用DOM。createElement'和其他人,而不是設置'innerHtml',因爲它更乾淨 –

回答

-1

我乾脆的onclick使用=」 closeHTML(name);「>在innerHTML中,它工作。我想這工作coz名稱是全局變量。

+0

在這個上下文中使用名稱將它作爲變量傳遞給closeTab()函數,而不是字符串。理想情況下,此上下文中的函數執行應該接收字符串,而不是全局變量。 – RobB

3

最後的代碼是:

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

你可以看到什麼是錯的? test正在被視爲一個變量,當你實際上打算它是一個字符串。

我喜歡用JSON.stringify來製作一個可變的可解析(有點像PHP中的var_export),但在這種情況下,您還需要轉義引號。所以:

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的不是正如上面所有人所建議的那樣。

相關問題