我正在努力使用JavaScript模块...
我有一个html文件和一个JS模块。我在javascript文件中定义了一个函数,我想从我的HTML页面调用该函数。这是我的代码
index.html
<html>
<head>
<script type="module" src="app.js"></script>
</head>
<body>
<button onclick="greetFromHtml();">greetFromHtml</button>
<button onclick="greetFromModule()"> greetFromModule</button>
<script type="text/javascript">
function greetFromHtml(){
alert('Hello');
}
</script>
</body>
</html>
app.js
function greet(){
alert('Hello');
}
greetFromHtml按钮工作正常。当我单击greetFromModule按钮时,我得到以下错误:hello is not defined at HTMLButtonElement.onclick
如果我从头文件中删除type="module"
,它可以正常工作,但是由于其他原因,我需要使用模块,所以这不是一个好的解决方案。
我看到几个帖子说我需要导入/导出或使用窗口,但我不知道该怎么做。有人能提供一个答案吗?理想情况下最简单的方法来实现它
见下面的参考一些问题,我已经审查:
function in my javascript module is not defined
Call functions in a JavaScript from an HTML
How to use code from script with type=module [duplicate]
ES6 Modules: Undefined onclick function after import
编辑我已经尝试了以下操作,但仍然得到相同的错误x1c 0d1xx 1c 1d 1xx 1c 2d 1x
EDIT 2答案中的代码工作正常。我只是尝试在本地运行,但我知道你需要一个服务器,所以如果你看到同样的错误,上载网站到服务器或使用本地服务器。
3条答案
按热度按时间vhmi4jdf1#
首先,你必须显式地导出你的函数:
其次,一个模块有它自己的作用域(这是模块的全部意义),因此你需要将函数添加到全局作用域。因此,要做到这一点,你必须运行一个脚本,该脚本导入函数并将其添加到窗口对象:
现在你不需要这部分
<script type="module" src="app.js"></script>
或者,你可以创建一个空的obj,并添加你的模块的东西,这是它看起来像:
aydmsdu92#
myscript.js
index.js
index.html
在script标签中,make script type = 'module' and src = './index.js'。现在它应该可以工作了。
s2j5cfk03#
你也可以尝试在你的html文档中重新排序你的引用。把你想调用的函数所在的模块放在调用它的模块之前。