var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>';
document.write(str);
when I click the <a>
on the page,it throws "Uncaught SyntaxError: Unexpected identifier".I can't understand.
var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>';
document.write(str);
when I click the <a>
on the page,it throws "Uncaught SyntaxError: Unexpected identifier".I can't understand.
The reason is that when you use string concatenation, params
is casted to string, as result you get something like [object Object]
in parenthesis.
You should better put params as var params = '{a:1,b:2}';
.
Upd.
As suggested in comments, another viable approach is using JSON.stringify
:
var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('
+ JSON.stringify(params)
+ ')">aaaa</a>';
document.write(str);
Please, pay attention that JSON.stringify
may not be supported by older browsers and you'll need to include additional libraries to make them work.
%22
gets parsed to "
, so passing this value to href
instead of onclick
will lead to XSS vulnerabilities. –
Exurbanite [object Object] is the string representation of any JavaScript object. In your scenario you have params
concatenated with a string, which will cast any variable type to a string.
The in your case str
looks like this:
<a href="#" onclick="doSomething([object Object])">aaaa</a>
As you can see, that is not what you want.
The answer by Li0liQ is quite Ok. When you clicking on that link you can find doSomething[object Object]
This is only object required .You are not writing the params into document
. Casting Problem.
Ran into same issue. Reason for the issue: params is converted to string 'object Object' when html is rendered.
The problem can be sorted out in two ways:
Approach 1: add a click handler to the js code. Refer add click handler
Approach 2: Say I want to pass a JSON object named 'params' to the onclick function. As I need a very few attributes of the 'params' object, instead of adding a new handler as in 1st approach, I would rather just pass those specific parameters as below:
'<a href="#" onclick="doSomething(\'' + params['attribute1'] + '\'\, \'' +params['attribute2'] + '\'\)">aaa</a>'
<button class="btn btn-primary" onclick='setInputForUpdate(${JSON.stringify(data)})' data-bs-toggle="modal"
© 2022 - 2024 — McMap. All rights reserved.
JSON.stringify(params)
to ensure the correct format. – Inger