1

我使用谷歌代碼推遲加載JavaScript(google pages

但我有一些內嵌的JavaScript,如:

<script type="text/javascript"> 
$(function() { 
    alert("please work"); 
}); 
</script> 

而這給了我:

Uncaught ReferenceError: $ is not defined

我想我需要一些函數,它是在jQuery加載並初始化我的內聯javascripts後觸發的。但如果有另一種方式,我會很高興。

編輯:

你們有些人完全沒有主題。 Mahesh Sapkal很近。

有了這個代碼,我沒有錯誤,但仍然不工作

<head> 
    <script type="text/javascript"> 
     var MhInit = NULL; 

     // Add a script element as a child of the body 
     function downloadJSAtOnload() { 
      var element = document.createElement("script"); 
      MhInit = element.src = "my_packed_scripts.js"; 
      document.body.appendChild(element); 
     } 

     // Check for browser support of event handling capability 
     if (window.addEventListener) 
      window.addEventListener("load", downloadJSAtOnload, false); 
     else if (window.attachEvent) 
      window.attachEvent("onload", downloadJSAtOnload); 
     else window.onload = downloadJSAtOnload; 
    </script> 

</head> 
<body> 
    <script type="text/javascript"> 
     MhInit.onload = function() { 
      console.debug("here"); 
     }; 
    </script> 
</body> 
+0

使用jQuery.noConflict(); –

回答

2

如果你要實現的Javascript的異步加載,那麼這將是一個更好的主意,沒有內嵌的JavaScript依賴在異步加載的文件上。

我懷疑你是異步加載jQuery,也就是在DOM內容加載後,所以依賴於jQuery的DOM中的任何內聯腳本都將失敗。在這種情況下,您可能想要使用諸如RequireJS之類的東西來管理JS依賴關係,並異步加載它們。然而,如果你想要一個更簡單的解決方案,我會建議把你的JS庫放在DOM的末尾,並將任何依賴關係綁定到onload處理程序。

像這樣的事情

<body> 
    <!-- Body content --> 
    <script>document.onload = function() { //use jQuery here }</script> 
</body> 
<script src="/path/to/jQuery/"></script> 
+0

嘗試這種方法無濟於事。這應該爲延期jQuery工作? – Trix

+0

延期jQuery是什麼意思? – Achrome

-3

試試這個http://w3schools.com/jquery/default.asp。你可以輕鬆地做到這一點。

<script> 
$(document).ready(function(){ 
$("p").click(function(){ 
alert("please work"); 
}); 
}); 
</script> 
+0

'$'未定義。你不能調用'$'來延遲加載JS直到'$'可用。 – Quentin

2

既然你推遲的jQuery加載,你的網線時的jQuery完成加載JavaScript的只應調用。使用下面的代碼來檢查庫是否被加載。

var scriptElem = document.createElement("script"); 

scriptElem.onload = function() { 
    alert('please work'); 
}; 

scriptElem.src = "http://code.jquery.com/jquery-1.10.1.min.js"; 

document.getElementsByTagName("head")[0].appendChild(scriptElem); 
3

在加載之前,您不能使用jQuery。如果您將<script src="jquery.js" />移動到頁面底部,則還必須移動所有在其下面使用$(...)的行。

還有就是去沿着這些路線的東西一個棘手的解決方案:

1)在你的頁面的頂部定義幾個變量:

var _jqq = []; 
var $ = function(fn) { 
    _jqq.push(fn); 
}; 

2)在頁面的中間,你可以寫:

$(function() { 
    alert("document ready callback #1"); 
}); 
$(function() { 
    alert("document ready callback #2"); 
}); 

3)在你的頁面的底部,包括jQuery的:

<script src="//code.jquery.com/jquery.min.js"></script> 

4)最後:

$(function() { 
    $.each(_jqq, function(i, fn) { 
     fn(); 
    }); 
}); 

Demo

+0

這看起來非常真棒和簡單,我仍然測試它,將盡快更新 –

相關問題