2012-07-04 79 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的不是正如上面所有人所建议的那样。

相关问题