var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+JSON.stringify(params)+')">aaaa</a>';
document.write(str);
当我点击页面上的<a>
时,它会抛出“Uncaught SyntaxError:Unexpected identifier”错误。我无法理解。
var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+JSON.stringify(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
可能不受较旧的浏览器支持,您需要包含其他库才能使它们正常工作。
对象
是任何JavaScript对象的字符串表示形式。在您的场景中,您将params
与字符串连接起来,这将把任何变量类型转换为字符串。
str
看起来像这样:<a href="#" onclick="doSomething([object Object])">aaaa</a>
正如您所看到的那样,这不是您想要的。Li0liQ的回答还不错。当你点击那个链接时,你会发现doSomething[object Object]
这只是需要一个对象。你没有将参数写入document
。这是一个类型转换问题。
遇到了同样的问题。 问题原因:在渲染 HTML 时,params 被转换为字符串 'object Object'。
可以通过以下两种方法解决问题:
方法1:在 js 代码中添加单击处理程序。参见add click handler
方法2:假设我想将名为 'params' 的 JSON 对象传递给 onclick 函数。由于我只需要 'params' 对象的很少属性,所以不会像第一种方法那样添加一个新的处理程序,而是将这些特定参数直接传递如下:
'<a href="#" onclick="doSomething(\'' + params['attribute1'] + '\'\, \'' +params['attribute2'] + '\'\)">aaa</a>'
JSON.stringify(params)
来确保正确的格式。 - kbjr"
, 因此将该值传递给href
而不是onclick
将导致 XSS 漏洞。 - test30