2011-12-22 22 views
0
function test() { 
    var id = 123; 
    var id12 = 'abcd'; 
    var childDiv = ""; 
    childDiv += '<div style="width:20px;height:20px" onclick="newsClicked('+id12+')">Click</div>'; 

    $("#mydiv").append(childDiv); 

} 

function newsClicked(param) { 
    alert(param); 
} 

上記はテスト関数です。test()は、テストdivのonClickイベントの中で呼び出す関数です。私が数値(整数)であるIDを渡すと、それは動作します。 文字列を渡すと参照エラーとなります。私はそれがクロージャーに関連していると思います。それを解決する方法。 ここで実際に何が起こっていますか?javascript関数へのパラメータの受け渡しが失敗する

答えて

2

変更:

childDiv += '<div style="width:20px;height:20px" onclick="newsClicked('+id12+')">Click</div>'; 

あなたは、パラメータとしての整数でDIVするchildDiv第一1を追加すると

childDiv += '<div style="width:20px;height:20px" onclick="newsClicked(\''+id12+'\')">Click</div>'; 

に結果は以下のようになります。で、正しい

<div style="width:20px;height:20px" onclick="newsClicked(3)">Click</div> 

文字列の場合、結果は次のようになります。

<div style="width:20px;height:20px" onclick="newsClicked(string_as_arg)">Click</div> 

これはOKではありません。string_as_argは最後にはスコープに含まれていない変数ではありません。そのため、アポストロフィで囲む必要があります。

したがって、整数定数の場合には大きな違いはありませんが、stringは変数ではない文字列として正しく認識されます。 numberquotesである必要はなく、stringquotesにしておく必要がありnumberので、あなたが渡しているとき、作業

+0

おかげで、それが働いて得たが、私は文字列パラメータとして渡すには、正確な問題が何であるかを取得していないが、私たちはなぜ、それをエスケープする必要がありますか? – sat

+0

@sat、私の編集をチェックしてください。私は説明を追加しました。 –

+0

@satこれを文字列として渡しますが、後で実行される異なるコードの文を連結するためだけです。 –

1

その。あなたに問題を

newsClicked(\''+id12+'\') 
1

、それを解決する方法

:そうあなたがescape文字"\"

にのようなものを使用する必要があり、文字列を渡します。

*注:ここで実際に起こっていただきましたあなたは以下のコード

function test() { 
    var id = 123; 
    var id12 = 'abcd'; 
    var childDiv = ""; 
    childDiv += '<div style="width:20px;height:20px" onclick="newsClicked(\''+id12+'\')">Click</div>'; 

    $("#mydiv").append(childDiv); 

} 

function newsClicked(param) { 
    alert(param); 
} 

\''+id12+'\'のように見ることができますか?

newsClicked機能はDIVは最近、DOM、 に追加されたクリックした後、それはここ

<div onclick="newsClicked(abcd)" style="width: 20px; height: 20px;">Click</div> 

のようにDOMに追加されます発射します、ABCDは変数のように使用しているが、実際には存在しません。

そして

ABCDが

が定義されていないが、あなたは整数であるID変数を置けば、それは

<div onclick="newsClicked(123)" style="width: 20px; height:20px;">Click</div> 

のようにDOMに追加するようにエラーが発生します構文的にはまったく正しい。

私は今、これをクリアすると思います。

乾杯、

+0

大丈夫なので、整数が渡された場合、変数としてではなく、値として扱われます。ピー! – sat

関連する問題