2012-06-13 96 views
1

喲社區!可能需要一些見解.. :)我正在學習一些更先進的js概念。即時通訊運行此代碼,但結果並沒有顯示,因爲我期待......我看不到錯誤...任何想法?謝謝!我試圖找到這個代碼中的錯誤,測試我的JavaScript代碼

<script type="text/javascript"> 

    (function() { 
     var results, queue = []; 
     this.assert = function(pass, msg) { 
      var type = pass ? "PASS" : "FAIL"; 
      var str = "<li class='" + type + "'><b>" + 
         type + "</b> " + msg + "</li>"; 
      if (queue) 
       queue.push(str); 
      else  
       results.innerHTML += str; 
     }; 

     window.addEventListener("load", function() { 
      results = document.getElementById("results"); 
      results.innerHTML = queue.join(''); 
      queue = null; 
     }); 

     // calling assert but it's not showing up the <li> with the message....(why?) 
     assert(true, "I always pass!"); 
    })(); 
</script> 
+0

請仔細閱讀[問] – nfechner

+0

什麼是應該發生的?怎麼了? –

+1

這裏適合我:http://jsfiddle.net/JDFuR/ - 你在測試什麼瀏覽器? – nnnnnn

回答

0

「就是有沒有其他語句將被用於任何機會呢?爲什麼是其他語句的想法?」

assert()功能的工作方式是,如果它被稱爲之前已經發生了文件加載事件存儲在queue陣列中的任何結果:因爲queue指的是陣列的條件if (queue)將是真實的。

然後負載處理程序運行時需要的一切已經在queue,並把它輸出到results元素設置queue爲null前:後

results.innerHTML = queue.join(''); 
queue = null; 

任何調用assert()文件裝載,然後會發現, if (queue)是錯誤的,因爲queue爲空,所以else將被執行,任何結果將直接輸出到results元素。

在你的代碼中,如圖所示,只有一個調用assert(),它會在文檔加載處理程序運行之前發生。

(下面是這個笨重的示範 - 壓到該按鈕會加載事件之後:http://jsfiddle.net/JDFuR/1/