2012-04-26 83 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