2012-04-26 21 views
0

我是Jquery的新手,在一本書中看到了這段代碼。 我想了解如何執行hideCode()。Jquery函數調用序列

這是我evets序列的認識多數民衆贊成將要發生:

  1. 文件被加載和準備執行的jQuery功能。
  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

恕我直言,在行中添加警報/console.debug並查看它們執行的順序。這將幫助你理解執行的順序。 – Shyju 2012-04-26 21:14:29

+3

您的代碼很難用1空格縮進來閱讀。我建議你使用4個空格。 – ThiefMaster 2012-04-26 21:17:18

+1

hideCode在您點擊之前被調用。 – jantimon 2012-04-26 21:50:30

回答

0

除非有我們沒有看到更多的代碼,hideCode只調用一次,當頁面加載。直到guess_box被點擊,checkForCode纔會運行。序列爲:

  1. Document被加載。
  2. checkForCode綁定到guess_box的單擊事件,但它尚未運行。
  3. hideCode運行。
+0

$(this).append(「」);和$(this).append(折扣); 爲什麼第一個附加是不可見的,而第二個附加是可見的。 – user1050619 2012-04-27 16:29:54

+0

可能是因爲裏面什麼都沒有。試試'$(this).append(「這裏是一些文字」);'而是。另外,如果guess_box元素少於5個,'numRand == index'可能永遠不會成立。 – 2012-04-27 17:14:01