javascript - 将模块中的函数绑定(bind)到 onclick 事件

标签 javascript ecmascript-6 module onclick

我有一个包含以下脚本的 html 文件:

<script type="module" src="js/app.js"></script>

这是我将应用程序逻辑与其他导入一起放置的地方。在这个 app.js 文件中,我有一个名为 test();

的函数
function test() {
    console.log("aaa");
}

此函数在使用以下代码动态附加的 HTML span 元素中的 onclick 事件中调用:

buildSideBar(technologies) {
    if(technologies.length > 0) {
        let spans = ``;
        const loader = document.getElementById('loader');
        const sidebar = document.getElementById('sidebar');
        for(const technology of technologies) {
            spans += `<span onclick="test()">${technology}</span>`;
        }
        loader.style.height = '0';
        loader.style.visibility = 'hidden';
        sidebar.innerHTML += spans;
        sidebar.classList.remove('hidden');
    }
}

跨度是按预期添加的,但是,当我按下它们时,我收到错误:

Uncaught ReferenceError: test is not defined
at HTMLSpanElement.onclick ((index):1)

我在这里做错了什么?

最佳答案

test() 函数在模块外部不可见,解决方案是将其添加到 window 对象中,以便可以访问它。

window.test= test;

正如 @VLAZ 提到的,还有将跨度动态绑定(bind)到 onclick 的解决方案。

关于javascript - 将模块中的函数绑定(bind)到 onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141755/

相关文章:

javascript - 通过单击 anchor 显示和隐藏两个图标

javascript - 在 Javascript 和 PHP 中十进制到 RGB

javascript - 如何删除与 glob 数组中的基本名称匹配的所有文件?

node.js - Express 服务器不关闭

unit-testing - 模拟使用箭头函数作为参数调用的方法

module - 找不到名称 'Headers' 、 'RequestInit' 、 'Response'

javascript - 这是什么功能模式?如果有的话?

javascript - 在 Javascript 中将对象转换为包含多个对象的数组的理想方法是什么? (允许 ES6)

python-3.x - "no module named torch"。但是在 Ubuntu 18.04.02 服务器版中安装了带有 conda 的 pytorch 1.3.0

将 google-cloud-datastore 依赖项添加到模块化 Java 11 项目时出现 java.lang.module.ResolutionException