2017-08-18 15 views
-3
<script> 

var id = "432.000+444"; 
myFunc(id); 
document.write("<a onclick=\"myFunc("+id+");\" href=#>Click me</a><br>"); 

function myFunc(id) { 
    alert(id); 
} 

</script> 

myFunc(id)は文字列を通常通り出力しますが、要素をクリックすると876が出力されます(番号として扱われ、432と444が追加されます)。どうすればこれを防ぐことができますか?私はそれを常に文字列として扱いたい。javascript関数でパラメータを文字列として扱うにはどうすればよいですか?

+2

これは、あなたがsaner Javascriptを書いた場合、問題にはなりません。 'document.getElementById( 'myLink')。addEventListener( 'クリック'、myFunc.bind(null、id))'; 'document.write'連結されたJavascriptのリテラルはかなり悪い習慣です... – deceze

答えて

3

は引用符でそれを入れて:

document.write("<a onclick=\"myFunc('"+id+"');\" href=#>Click me</a><br>"); 
// ---------------------------------^------^ 

FWIW、私は強くonxyz -attributeスタイルのイベントハンドラを使用してないをお勧めします。 1つは、それらから呼び出す関数はグローバルでなければならず、一般的には良いことではありません。代わりに、最新のイベントハンドリング(古いIEではaddEventListener、またはattachEvent; here's a function that handles that issue)、またはonclickプロパティで使用してください。

var id = "432.000+444"; 
var link = document.createElement("a"); 
link.onclick = myFunc.bind(link, id); 
link.href = "#"; 
link.appendTextNode("Click me"); 
appropriateParentElement.appendChild(link); 
appropriateParentElement.appendChild(document.createElement("br")); 

function myFunc(id) { 
    alert(id); 
} 
+0

ありがとう、それは働いた。私は二重引用符でそれを置こうとしましたが、それは何らかの理由でうまくいきませんでした。代わりに一重引用符が必要なように見えます。 – Kidades

+0

@Kidades:これは 'onclick'-attribute-styleハンドラを使わない理由の一つです。二重引用符で区切られた属性の内容に二重引用符を使用できないため、二重引用符が機能しませんでした。 (属性値はHTMLテキストなので、 '"e;'を使うことができますが、実際には読みにくいJavaScriptになります) –

+0

二重引用符は使えますが、二重引用符と前の '\\ '。それは混乱するだろう。単一引用符を使用するだけで、はるかに読みやすく、エラーが発生しにくい。 – Amy

2

引用符で囲む必要があります。

        ↓  ↓ 
document.write("<a onclick=\"myFunc('"+id+"');\" href=#>Click me</a><br>"); 

一重引用符に注意してください。

+2

7秒遅くなりますが、より良い矢印です。私はとても葛藤しています。 –

+1

うわー、私はそれらが好きです。自分の為にメモする。 :-) –

+1

@ T.J.Crowder FYI、https://unicode-table.com/en/sets/arrows-symbols/から入手しました – Amy

関連する問題