[英]Calling a JavaScript function in another js file
我想在 second.js 文件中調用在first.js文件中定義的function 。 這兩個文件都在 HTML 文件中定義,例如:
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
我想在first.js
中調用 first.js 中定義的second.js
fn1()
。 根據我的搜索答案,如果首先定義first.js
是可能的,但根據我的測試,我還沒有找到任何方法來做到這一點。
這是我的代碼:
second.js
document.getElementById("btn").onclick = function() {
fn1();
}
first.js
function fn1() {
alert("external fn clicked");
}
一個函數不能被調用,除非它是在同一個文件中定義的,或者是在嘗試調用它之前加載的。
一個函數不能被調用,除非它在與試圖調用它的那個相同或更大的范圍內。
你在 first.js 中聲明函數fn1
,然后在第二個你可以只擁有fn1();
1.js:
function fn1 () {
alert();
}
2.js:
fn1();
索引.html:
<script type="text/javascript" src="1.js"></script>
<script type="text/javascript" src="2.js"></script>
第一個JS:
function fn(){
alert("Hello! Uncle Namaste...Chalo Kaaam ki Baat p Aate h...");
}
第二個JS:
$.getscript("url or name of 1st Js File",function(){
fn();
});
希望這有助於...快樂編碼。
您可以在first.js
將該函數first.js
全局變量並查看閉包,不要將其放在document.ready
將其放在外面
你也可以使用ajax
$.ajax({
url: "url to script",
dataType: "script",
success: success
});
同樣的方式你可以使用jquery getScript
$.getScript( "ajax/test.js" )
.done(function( script, textStatus ) {
console.log( textStatus );
})
.fail(function( jqxhr, settings, exception ) {
$( "div.log" ).text( "Triggered ajaxError handler." );
});
您可以考慮使用 es6 導入導出語法。 在文件 1 中;
export function f1() {...}
然后在文件 2 中;
import { f1 } from "./file1.js";
f1();
請注意,這僅在您使用<script src="./file2.js" type="module">
如果您這樣做,您將不需要兩個腳本標簽。 您只需要主腳本,然后就可以在那里導入所有其他內容。
它應該像這樣工作:
1.js
function fn1() {
document.getElementById("result").innerHTML += "fn1 gets called";
}
2.js
function clickedTheButton() {
fn1();
}
索引.html
<html>
<head>
</head>
<body>
<button onclick="clickedTheButton()">Click me</button>
<script type="text/javascript" src="1.js"></script>
<script type="text/javascript" src="2.js"></script>
</body>
</html>
輸出
試試這個 CodePen 片段:鏈接。
請注意,這僅適用於
<script>
標簽在身體里而不是在頭里。
所以
<head>
...
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
</head>
=> 未知函數 fn1()
失敗和
<body>
...
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
</body>
作品。
使用窗口在全局范圍內聲明函數
第一個.js
window.fn1 = function fn1() {
alert("external fn clicked");
}
第二個.js
document.getElementById("btn").onclick = function() {
fn1();
}
包括這樣
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
如果您的服務器允許它提高速度,請使用緩存。
var extern =(url)=> { // load extern javascript
let scr = $.extend({}, {
dataType: 'script',
cache: true,
url: url
});
return $.ajax(scr);
}
function ext(file, func) {
extern(file).done(func); // calls a function from an extern javascript file
}
然后像這樣使用它:
ext('somefile.js',()=>
myFunc(args)
);
或者,制作它的原型以使其更靈活。 這樣你就不必每次都定義文件,如果你調用一個函數或者你想從多個文件中獲取代碼。
function first() { alert("first"); }
var imported = document.createElement("script");
imported.src = "other js/first.js"; //saved in "other js" folder
document.getElementsByTagName("head")[0].appendChild(imported);
function second() { alert("Second");}
<HTML>
<HEAD>
<SCRIPT SRC="second.js"></SCRIPT>
</HEAD>
<BODY>
<a href="javascript:second()">method in second js</a><br/>
<a href="javascript:first()">method in firstjs ("included" by the first)</a>
</BODY>
</HTML>
window.onload = function(){
document.getElementById("btn").onclick = function(){
fn1();
}
// this should work, It calls when all js files loaded, No matter what position you have written
});
在創建函數時使用“var”,然后您可以從另一個文件訪問它。 確保這兩個文件都很好地連接到您的項目並且可以相互訪問。
文件_1.js
var firstLetterUppercase = function(str) {
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
return letter.toUpperCase();
});
return str;
}
從 file_2.js 文件訪問此函數/變量
firstLetterUppercase("gobinda");
輸出 => 戈賓達
希望這會幫助某人,快樂編碼!!!
這實際上來得很晚,但我想我應該分享,
在 index.html 中
<script type="text/javascript" src="1.js"></script>
<script type="text/javascript" src="2.js"></script>
在 1.js 中
fn1 = function() {
alert("external fn clicked");
}
在 2.js 中
fn1()
我的想法是讓兩個 JavaScript 通過 DOM 調用函數。
方法很簡單……我們只需要定義隱藏的js_ipc html標簽。 在被調用者從隱藏的 js_ipc 標簽注冊點擊后,調用者可以調度點擊事件來觸發被調用者。 如果您想通過,則參數將保存。
什么時候需要使用上面的方式?
有時,這兩個 javascript 代碼集成起來非常復雜,並且有很多異步代碼。 不同的代碼使用不同的框架,但您仍然需要有一種簡單的方法將它們集成在一起。
因此,在這種情況下,要做到這一點並不容易。
在我的項目實現中,遇到了這種情況,集成起來非常復雜。 最后我發現我們可以讓兩個javascript通過DOM互相調用。
我在這個 git 代碼中演示了這種方式。 你可以通過這種方式得到它。 (或從https://github.com/milochen0418/javascript-ipc-demo閱讀)
git clone https://github.com/milochen0418/javascript-ipc-demo
cd javascript-ipc-demo
git checkout 5f75d44530b4145ca2b06105c6aac28b764f066e
任何地方,在這里,我嘗試通過以下簡單案例進行解釋。 我希望這種方式可以幫助您比以前更容易地集成兩個不同的 javascript 代碼,因為沒有任何 JavaScript 庫來支持不同團隊制作的兩個 javascript 文件之間的通信。
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div id="js_ipc" style="display:none;"></div>
<div id="test_btn" class="btn">
<a><p>click to test</p></a>
</div>
</body>
<script src="js/callee.js"></script>
<script src="js/caller.js"></script>
</html>
和代碼 css/style.css
.btn {
background-color:grey;
cursor:pointer;
display:inline-block;
}
js/caller.js
function caller_add_of_ipc(num1, num2) {
var e = new Event("click");
e.arguments = arguments;
document.getElementById("js_ipc").dispatchEvent(e);
}
document.getElementById("test_btn").addEventListener('click', function(e) {
console.log("click to invoke caller of IPC");
caller_add_of_ipc(33, 22);
});
js/callee.js
document.getElementById("js_ipc").addEventListener('click', (e)=>{
callee_add_of_ipc(e.arguments);
});
function callee_add_of_ipc(arguments) {
let num1 = arguments[0];
let num2 = arguments[1];
console.log("This is callee of IPC -- inner-communication process");
console.log( "num1 + num2 = " + (num1 + num2));
}
我想調用一個在second.js文件中的first.js文件中定義的函數。 這兩個文件都在HTML文件中定義,例如:
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
我想打電話給fn1()
中定義first.js
在second.js
。 根據我的搜索答案,如果first.js
定義了first.js
是可能的,但是根據我的測試,我還沒有找到實現此目的的任何方法。
這是我的代碼:
second.js
document.getElementById("btn").onclick = function() {
fn1();
}
first.js
function fn1() {
alert("external fn clicked");
}
遲到總比不到好
(function (window) {const helper = { fetchApi: function () { return "oke"}
if (typeof define === 'function' && define.amd) {
define(function () { return helper; });
}
else if (typeof module === 'object' && module.exports) {
module.exports = helper;
}
else {
window.helper = helper;
}
}(window))
index html <script src="helper.js"></script>
<script src="test.js"></script>
在 test.js 文件helper.fetchApi()
我有同樣的問題。 我已經在 jquery文檔就緒函數中定義了函數。
$(document).ready(function() {
function xyz()
{
//some code
}
});
我在另一個文件中調用了這個函數xyz() 。 這不起作用:) 您必須在文檔 ready之上定義函數。
// module.js
export function hello() {
return "Hello";
}
// main.js
import {hello} from 'module'; // or './module'
let val = hello(); // val is "Hello";
來自https://hype.codes/how-include-js-file-another-js-file 的參考
每當您訪問 JS 文件或<script>
塊中的元素時,必須檢查以確保該元素存在,即 jQuery 的$(document).ready()
或普通 JS 的document.addEventListener('DOMContentLoaded', function(event)...
但是,如果您為 DOMContentLoaded 添加事件偵聽器,則公認的解決方案不起作用,您可以從評論中輕松觀察到這一點。
解決方法如下:
document.addEventListener('DOMContentLoaded', function(event) {...})
中。 或document.Ready()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.