onclick =“doSomething([object Object])”Uncaught SyntaxError:意外的标识符

时间:2012-08-01 05:50:17

标签: javascript onclick syntax-error

var params = {a:1,b:2}; var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>'; document.write(str);

当我单击页面上的<a>时,它会抛出“Uncaught SyntaxError:Unexpected identifier”。我无法理解。

5 个答案:

答案 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>'