var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>';
document.write(str);
当我单击<a>
页面上的 时,它会抛出“Uncaught SyntaxError:Unexpected identifier”。我无法理解。
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]
括号中的内容。
您最好将参数设置为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]
这只是需要的对象。您没有将参数写入document
. 铸造问题。
遇到同样的问题。问题原因:在呈现 html 时,params 被转换为字符串 'object Object'。
问题可以通过两种方式解决:
方法一:在 js 代码中添加点击处理程序。请参阅添加点击处理程序
方法 2:假设我想将一个名为“params”的 JSON 对象传递给 onclick 函数。由于我需要'params'对象的很少属性,而不是像第一种方法那样添加新的处理程序,我宁愿只传递那些特定的参数,如下所示:
'<a href="#" onclick="doSomething(\'' + params['attribute1'] + '\'\, \'' +params['attribute2'] + '\'\)">aaa</a>'