2014-01-14 17 views
0

試圖製作一個簡單的小部件。 步驟:javascript回調上下文問題

1)如果不是已經有 2加載的jQuery)回調函數

<html> 
<head> 
    <script type="text/javascript"> 
    function load(callback){ 
     console.log('load'); 
     if (typeof jQuery !== "function") { 
      var js = document.createElement("script"); 
      var he = document.getElementsByTagName('head')[0]; 
      js.type = "text/javascript"; 
      js.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"; 
      he.appendChild(js); 
      js.addEventListener("load", function() { 
       callback(); 
      }); 
     } 
     else 
      { 
       callback(); 
      } 
    } 


    load(function(){ 
     chart(); 
    }) 


    function chart(){ 
     $('#chart').html("id : "+Math.random()); 
    } 

    // alert('This alert breaks!'); 
    </script> 
</head> 
<body> 
    <div id="chart"></div> 
</body> 
</html> 

代碼工作沒有警報。不能理解上下文問題

謝謝

+0

在Chrome中適用於我:http://jsfiddle.net/Zwa7Q/ –

+0

您的問題是什麼? –

+0

在FF中適合我。 – juanpaco

回答

4

好的,想通了問題。

您的代碼不在DOM就緒處理程序中。

如果警報不存在,它將工作,因爲函數調用是異步的,並且DOM在AJAX完成之前已準備就緒。

當警報是存在的,它在你的代碼中創建一個斷點,直到你點擊確定的DOM將無法完成。問題在於AJAX請求沒有停止。當您點擊ok時,AJAX將完成並在DOM準備好之前運行回調。

0

將腳本塊移出head標記,並將其放置在body的末尾</body>之前。