2012-04-26 19 views
0

私はJqueryの初心者で、このコードを本で見ました。 hideCode()がどのように実行されているかを理解しようとしています。Jquery関数呼び出しシーケンス

  1. ドキュメントがロードされ、jqueryの機能を実行するためにその準備ができます:

    これが起こるだろうthatsのevetsの一連の私の理解です。

  2. guess_boxをクリックすると、checkForCode()関数が実行されます。
  3. hideCode()関数が実行されます。

これは間違いありませんか?

$(document).ready(function() { 
    $(".guess_box").click(checkForCode); 
    function getRandom(num) { 
     var my_num = Math.floor(Math.random() * num); 
     return my_num; 
    } 
    var hideCode = function() { 
     var numRand = getRandom(4); 
     $(".guess_box").each(function(index, value) { 
      if(numRand == index){ 
       $(this).append("<span id='has_discount'></span>"); 
       return false; 
      } 
     }); 
    } 
    hideCode(); 
    function checkForCode() { 
     var discount; 
     if($.contains(this, document.getElementById("has_discount"))) { 
      var my_num = getRandom(5); 
      discount = "<p>Your Discount is " + my_num + "%</p>"; 
     } else { 
      discount = "<p>Sorry, no discount this time!</p>" ; 
     } 
     $(this).append(discount); 
     $(".guess_box").each(function() { 
      $(this).unbind('click'); 
     }); 
+3

IMHO、警告/console.debugをbeteeen行に追加し、実行中の順番を確認してください。それは実行の順序を理解するのに役立ちます。 – Shyju

+3

あなたのコードは1スペースの字下げで読みにくいです。私は4つのスペースを使用することをお勧めします。 – ThiefMaster

+1

hideCodeは、クリックする前に呼び出されます。 – jantimon

答えて

0

表示されないコードが多い場合を除き、ページが読み込まれるとhideCodeが1回だけ呼び出されます。 guess_boxをクリックするまでcheckForCodeが実行されません。シーケンスは次のとおりです。

  1. ドキュメントが読み込まれます。
  2. checkForCodeは、guess_boxのclickイベントにバインドされますが、まだ実行されません。
  3. hideCodeが実行されます。
+0

$(this).append( "")の違いは何ですか? $(this).append(discount); 2番目の追加が表示されるのに対し、1番目の追加は表示されないのはなぜですか? – user1050619

+0

おそらくそれに何もないからでしょう。 '$(this).append(" ここにあるテキスト ");'を試してください。また、guess_box要素が5つ未満の場合、 'numRand == index'は決して真ではないかもしれません。 –

関連する問題