7

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

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

4

5 回答 5

10

原因是当您使用字符串连接时,params它被强制转换为字符串,结果您会得到类似[object Object]括号中的内容。

您最好将参数设置为var params = '{a:1,b:2}';.

更新。
正如评论中所建议的,另一种可行的方法是使用JSON.stringify

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

请注意,JSON.stringify旧浏览器可能不支持这些内容,您需要包含其他库才能使其正常工作。

于 2012-08-01T05:52:50.033 回答
1

[object Object] 是任何 JavaScript 对象的字符串表示形式。在您的场景中,您已经params连接了一个字符串,这会将任何变量类型转换为字符串。

于 2012-08-01T05:52:35.510 回答
0

在你的情况下str看起来像这样: <a href="#" onclick="doSomething([object Object])">aaaa</a>

如您所见,这不是您想要的。

于 2012-08-01T05:55:58.033 回答
0

Li0liQ 的回答还不错。当您单击该链接时,您可以找到doSomething[object Object]

这只是需要的对象。您没有将参数写入document. 铸造问题。

于 2012-08-01T06:21:48.407 回答
0

遇到同样的问题。问题原因:在呈现 html 时,params 被转换为字符串 'object Object'。

问题可以通过两种方式解决:

方法一:在 js 代码中添加点击处理程序。请参阅添加点击处理程序

方法 2:假设我想将一个名为“params”的 JSON 对象传递给 onclick 函数。由于我需要'params'对象的很少属性,而不是像第一种方法那样添加新的处理程序,我宁愿只传递那些特定的参数,如下所示:

'<a href="#" onclick="doSomething(\'' + params['attribute1'] + '\'\, \'' +params['attribute2'] + '\'\)">aaa</a>'
于 2020-05-19T16:27:50.753 回答