onclick=“;doSomething([object object])“;未捕获的语法错误:意外的标识符

onclick="doSomething([object Object])" Uncaught SyntaxError: Unexpected identifier

本文关键字:object 语法 标识符 意外 错误 doSomething onclick      更新时间:2024-05-31

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

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

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

您最好将params设置为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,您需要包含其他库才能使其正常工作。

[object object]是任何JavaScript对象的字符串表示。在您的场景中,params与一个字符串连接,该字符串将把任何变量类型强制转换为字符串。

在您的案例中,str如下所示:<a href="#" onclick="doSomething([object Object])">aaaa</a>

正如你所看到的,这不是你想要的。

Li0liQ的答案很好。当你点击该链接时,你可以找到doSomething[object Object]

这是唯一需要的对象。您没有将params写入document。铸造问题。

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

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

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

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

'<a href="#" onclick="doSomething(''' + params['attribute1'] + '''', ''' +params['attribute2'] + '''')">aaa</a>'