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
。キャスティングの問題。