如果在Html中以script type="module"的方式嵌入JavaScript,在script外部,比如div的onclick事件中,是不能访问script中的变量或函数的,因它module类型指定了JavaScript代码是模块,外部无法访问模块中的内容。
如果需要访问,可以通过以下几种办法:
方法1:使用全局变量
可以将模块中的函数赋值给一个全局变量,然后在onclick中调用这个全局变量。
// 在模块中
window.myGlobalFunction = function() {
// 你的函数实现
};
// 在HTML中
<div onclick="myGlobalFunction()">点击我</div>
方法2:使用事件监听器
在JavaScript模块中通过addEventListener为<div>元素添加事件监听器。这样,你可以完全在模块化的环境中工作,而不必依赖全局变量。
<div id="myDiv">点击我</div>
<script type="module">
import { myFunction } from './myModule.js'; // 假设myFunction是你想调用的函数
document.getElementById('myDiv').addEventListener('click', function() {
myFunction();
});
</script>
在myModule.js中,你只需正常导出你的函数:
// myModule.js
export function myFunction() {
// 你的函数实现
console.log('函数被调用了!');
}
方法3:使用自定义数据属性
给div添加一个自定义数据属性(如data-action),然后在模块中通过事件监听器检查这个属性,并根据其值调用相应的函数。这种方法提供了更多的灵活性,但也需要你在模块中编写更多的逻辑来解析和调用函数。
<div id="myDiv" data-action="myFunction">点击我</div>
<script type="module">
import * as actions from './actions.js'; // 假设actions.js导出了多个函数
document.getElementById('myDiv').addEventListener('click', function() {
const actionName = this.getAttribute('data-action');
if (actions[actionName]) {
actions[actionName]();
}
});
</script>
在actions.js中:
// actions.js
export function myFunction() {
// 你的函数实现
console.log('通过自定义数据属性调用的函数!');
}
注意:JavaScript开发的功能,运行于浏览器,他人只需在浏览器中右键查看网页源码,便可得获得源码,可以分析功能逻辑、可以复制、可以修改盗用。为了防止代码被任意分析、复制、盗用。JavaScript开发的功能可以用JShaman、JS-Obfuscator、JsJiaMi.Online等工具进行JS代码混淆加密。