[英]I have an issue with inline vs included Javascript
我對 JavaScript 比較陌生,正在嘗試了解如何正確使用它。
如果我將 JavaScript 代碼包裝在匿名 function 中以避免public
變量,則 JavaScript 中的函數在包含 JavaScript 的 html 中不可用。
在初始加載頁面時,JavaScript 會加載並執行,但在隨后重新加載頁面時,JavaScript 代碼不會再次通過執行過程 go。 具體來說,有一個 ajax 調用使用httprequest
從 PHP 文件中獲取它,並將返回的數據傳遞給回調function ,如果我可以調用httprequest
從 html 中執行 httprequest
<script type="text/javascript" ></script>
在每次頁面加載時阻止我都准備好了 - 因為我必須將整個 JavaScript 代碼注入該塊以使其在頁面加載時工作,希望有人可以教育我。
如果您沒有使用 javascript 框架,我強烈建議您使用它。 我使用 MooTools,但還有許多其他工具非常可靠(Prototype、YUI、jQuery 等)。 這些包括將功能附加到 DomReady 事件的方法。 問題在於:
window.onload = function(){...};
是你只能有一個 function 附加到該事件(后續分配將覆蓋這個)。
框架為此提供了更合適的方法。 例如,在 MooTools 中:
window.addEvent('domready', function(){...});
最后,還有其他方法可以避免污染全局命名空間。 僅命名您自己的代碼 (mySite.foo = function...) 將幫助您避免任何潛在的沖突。
還有一件事。 根據您的評論,我不能 100% 確定您遇到的問題是特定於頁面加載事件的。 您是說代碼也需要在 ajax 返回時執行嗎? 如果是這種情況,請編輯您的問題。
我建議只做 window.onload:
<script type="text/javascript">
(function() {
var private = "private var";
window.onload = function() {
console.log(private);
}
})();
</script>
最好不要將所有內容都包裝在匿名 function 中,只希望它被執行。 您可以將其命名為 function,並將其名稱放入 body 標記的加載處理程序中。 這應該確保它在每次加載頁面時運行。
取決於你想做什么,但為了避免污染全局命名空間,你可以將你的代碼附加到你關心的元素上。
例如
<div id="special">Hello World!</div>
<script>
(function(){
var foo = document.getElementById('special');
foo.mySpecialMethod = function(otherID, newData){
var bar = document.getElementById(otherID);
bar.innerHTML = newData;
};
//do some ajax... set callback to call "special" method above...
doAJAX(url, 'get', foo.mySpecialMethod);
})();
</script>
我不確定這是否能解決您的問題,但這是處理它的一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.