2016-06-23 10 views
1

私はJQueryで始まります。私は、関数内で引数として文字列を渡したい場合は、時にはそれが動作しませんし、私はなぜ知らない...文字列を関数の引数として渡せませんJquery

これは一例です。この例では

$(document).ready(test()); 

function test() { 
    $('path[secteur]').each(function() { 
     if ($(this).attr('id') == ("23C01")) { 
      id = ($(this).attr('id')); 
      afficher(id); 

     } 
    }) 
} 

function afficher(mo) { 
    document.getElementById("test").innerHTML = "<p id=" + mot + " onclick='tester(" + mot + ")'> step 1</p>"; 

} 

function tester(verbe) { 
    document.getElementById(verbe).innerHTML = "step 2"; 
} 

それだけで作品です"afficher"に対しては問題ありませんが、 "テスター"では動作しません。生成されたHTMLをクリックしようとすると、「Uncaught SyntaxError:missing」という引数リストの後に "

誰かがなぜ知っていますか?

+4

'$(document).ready(test));'から中括弧 '()'を削除します。 '$(document).ready(test);' – Tushar

+2

を使用する 'afficher()'の宣言は 'mo'パラメータを呼び出しますが、コードは' mot'を呼び出します。 – Pointy

+2

このコードにはいくつかの問題があるようです。たとえば、変数 'mot'は決して定義しません。 'document'のreadyイベントの前に' test() '*を実行しています(@ Tusharのコメントを参照)ので、' afficher(id) 'を呼び出すとき' id'値には何も入っていない可能性があります。エラー自体については、それを生成するコードの正確な行は何ですか? JavaScriptを埋め込んだHTMLを動的に追加しています。埋め込まれたJavaScriptが不正な形式の場合は、*それを見て、それが不正な形式である可能性がある理由を確認してください。 – David

答えて

0
  1. のJS側:あなたは、関数呼び出しで文字列のqoutesを失っています。
  2. HTML側:属性値をエスケープしていません。
  3. すべての機能はグローバルにする必要があります。
  4. $(document).ready(test()); - testが即時実行されます。

コード全体がひどいです。

0

あなたがプログラムのコンテキストで関数を呼び出す場合の違いがあります:

var test = 2; 
test++; 
test = domymath(test); 
alert(test); 

それともあなたは、関数のコールバックで機能を呼び出す場合:

var test = 2; 
test++; 
test = domymath(test, alert); 

あなたは、引数/値を渡すことができます()では関数をプログラムコンテキストで呼び出すと関数に渡されますが、関数をコールバックとして呼び出すと関数を渡すことはできません。
コールバック用には、呼び出す関数の名前のみを定義するためです。あなたのケースで使用中のSO

$(document).ready(test); 
// calls test(); 

$(document).ready(function() { 
     test(one, two); 
}); 
// calls test(one, two); 
関連する問題