var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>';
document.write(str);
当我单击页面上的<a>
时,它会抛出“Uncaught SyntaxError:Unexpected identifier”。我无法理解。
答案 0 :(得分:10)
原因是当你使用字符串连接时,params
会被转换为字符串,因此你会在括号中得到类似[object Object]
的内容。
你最好把params作为var params = '{a:1,b:2}';
。
<强> UPD。强>
正如评论中所建议的,另一种可行的方法是使用JSON.stringify
:
var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('
+ JSON.stringify(params)
+ ')">aaaa</a>';
document.write(str);
请注意,旧浏览器可能不支持JSON.stringify
,您需要包含additional libraries才能使其正常运行。
答案 1 :(得分:1)
[object Object]是任何JavaScript对象的字符串表示形式。在您的方案中,您将params
与字符串连接,这将把任何变量类型转换为字符串。
答案 2 :(得分:0)
在您的案例中str
如下所示:
<a href="#" onclick="doSomething([object Object])">aaaa</a>
如您所见,这不是您想要的。
答案 3 :(得分:0)
Li0liQ的回答非常好。点击该链接后,您可以找到doSomething[object Object]
这只是必需的对象。你没有将参数写入document
。铸造问题。
答案 4 :(得分:0)
遇到同样的问题。 问题的原因:呈现html时,params转换为字符串'object Object'。
可以通过两种方式解决问题:
方法1:将点击处理程序添加到js代码中。请参阅add click handler
方法2:说我想将名为“ params”的JSON对象传递给onclick函数。因为我需要'params'对象的很少的属性,而不是像第一种方法那样添加新的处理程序,所以我只想按如下方式传递这些特定参数:
'<a href="#" onclick="doSomething(\'' + params['attribute1'] + '\'\, \'' +params['attribute2'] + '\'\)">aaa</a>'