簡體   English   中英

從另一個包含的JavaScript調用包含的JavaScript代碼的函數

[英]Call function of included JavaScript code from another included JavaScript

我正在嘗試在頁面中使用其他已加載的JavaScript ,但無法讓他們交談。

<html>
<script type="text/javascript" src="jquery144.js"></script>
<script type="text/javascript" src="shared_functions.js"></script>
<script type="text/javascript" src="page_function_callers.js"></script>
</html>


// shared_functions.js
$(document).ready (function () {
    function sayHello (what) {
        alert (what);
    }
});

// page_function_callers.js
$(document).ready (function () {
    $("div.my_button").click (function () {
        sayHello ("Hello world!");
    });
});

我使用jQuery,我想使用這種方式,因為它應該讓我可以回收許多公共方法。 我哪里錯了?

函數sayHelloDOMReady事件( $(document).ready )的腳本內部聲明。 在該范圍之外將不可用。 但是沒有必要在該范圍內聲明一個函數。 即使sayHello使用了大量的DOM對象(在您的示例中是不使用),它也不會被執行直到被調用,因此您唯一需要確保的是直到DOMReady之后才調用該函數。 。

因此,您可以簡單地刪除shared_functions.js中的第一行和最后一行,即$(document).ready(function() {}); $(document).ready(function() { 分別,並且您的代碼將起作用。

嘗試在調用$(document).ready之外定義函數sayHello

當您在“就緒”功能中聲明“ sayHello”(有人還記得夏洛特·丘奇的歌嗎?天哪,回憶...),它就在該功能的本地。 如果願意,可以將其設置為全局:

window['sayHello'] = function sayHello(what) {
  alert(what);
};

(最好給該函數一個“本地”名稱,即“ function”關鍵字之后的名稱,因為這樣在Firebug中該函數就不會顯示為“ anonymous”。)

我鼓勵您研究將全局函數放入jQuery插件,或者至少將jQuery“ global”放入jQuery對象而不是“ window”的情況。

在上面的代碼中,sayHello()方法僅在匿名函數的作用域內定義。

此代碼可能更適合您:

// shared_functions.js
window.MyNamespace = window.MyNamespace || {};
MyNamespace.sayHello = function(what)
{
  alert(what);    
};

// page_function_callers.js
$(document).ready (function ()
{
    $("div.my_button").click (function ()
    {
      MyNamespace.sayHello('hello world');    
    });
});

確保以正確的順序加載JS文件。 那里有更多優雅的解決方案,但這是一個相當簡單明了的解決方案。

這種方法的一個優點是不會污染全局名稱空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM