2012-01-18 17 views
0

もう1つの不運なnoob ... これはjQuery/JavaScript関数を作成する方法を見つけようとしています。 onclick="loadNext(YorN);"関数が定義されていない - jQuery/Javascript

<script type="text/javascript"> 

$(function() 
{ 
     function loadNext(choice) { 
      $("#thequestion").load("question.php", { ans: choice, id: "<?php echo $row['id']; ?>", nextId: "<?php echo $nextQuestionId; ?>" }); 

      $("#graph").load("graph.php", { id:"<?php echo $row['id']; ?>", nextId: "<?php echo $nextQuestionId; ?>" }); 
      alert("loadNext activated"); 
     } 

}); 
</script> 

が、私はそのようにようonclickイベントを使用してloadNext(choice)関数を呼び出す:ここに私のコードです。

これに続いて、 'loadNext is not defined'エラーが発生します。

私が受け入れる答えの中には、「わからない! 「あなたはばかだ」

Here is a similar problem.

感謝。

答えて

4

ここで定義したloadNext関数は、匿名関数のスコープのローカルです。グローバルにアクセスする場合は、グローバルに(onreadyハンドラの外側で)定義します。

1

あなたは

(function() 
{ 
     function loadNext(choice) { 
      this is bad 
     } 

function loadNext(choice) { 
      this is good 
     } 

onclick="loadNext()" 

関数の内部機能を持っているので、何ちゃったごめんなさいは

1

なぜあなたはたったの$(関数(){})の外に、あなたのloadNext機能を入れていけませんか?

2

外側の「$(関数()..」あなたはあなたの最初の行に持っているあなたの範囲を限定する - 。loadNext機能は、このブロック内でのみ利用可能であり、それの外で定義されません

への簡単な方法この問題を回避することは、単に$(関数()...)ブロック外「loadnext」関数を定義することですが、これは二つの理由が間違っている:

  1. これはあなたのアプリケーション全体でグローバル関数を行い、汚染しますグローバルネームスペースはnoです。
  2. "onclick"のようなインラインJavaScriptは一般的に悪いです - これは行をぼかしますプレゼンテーションとロジックの間にあり、デバッグに苦労します。

これを回避するには、jqueryバインドイベントを使用してイベントハンドラをアタッチします。すなわち、

$( "#のmyfancybutton"、(関数(){loadNext(選択肢)})をクリックしてください。あなたの$内(関数()...)圏

+0

ヒントをいただきありがとうございます。 – user1104147

1

loadNextはグローバルスコープではありませんので、あなた。グローバルスコープで定義することができます。より良い解決方法は、.click()を使用してクリックイベントをバインドすることです。

関連する問題