var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>';
document.write(str);
ページをクリックする<a>と、「Uncaught SyntaxError:Unexpectedidentifier」がスローされます。理解できません。
var params = {a:1,b:2};
var str = '<a href="#" onclick="doSomething('+params+')">aaaa</a>';
document.write(str);
ページをクリックする<a>と、「Uncaught SyntaxError:Unexpectedidentifier」がスローされます。理解できません。
その理由は、文字列連結を使用すると、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 の答えはかなりOKです。そのリンクをクリックすると、見つけることができますdoSomething[object Object]
これは必要なオブジェクトのみです。パラメータを に書き込んでいませんdocument。キャスティングの問題。