繁体   English   中英

未捕获ReferenceError:未定义Activetab

[英]Uncaught ReferenceError: Activetab is not defined

我有这个脚本:

(function Activetab () {
    var tabs = document.getElementsByClassName('tab');

    for (i = 0; i < tabs.length; i++) {
        tabs[i].addEventListener('click', function (e) {
            removeActive();
            e.target.classList.add('active');
         })
    }
})();

function removeActive() {
    var tabs = document.getElementsByClassName('tab');
    for (i = 0; i < tabs.length; i++) {
        tabs[i].classList.remove('active')
    }
}
window.onload = Activetab();
window.onload = removeActive();

由于某些原因,当我尝试使用window.onload = Activetab(); 返回

未捕获ReferenceError:未定义Activetab

怎么了? 为什么window.onload函数无法收听Activetab函数

您将立即调用函数Activetab ,您需要阅读有关IIFE (立即调用函数表达式)的更多信息。

我不知道您为什么要立即执行该功能,但这可能是您正在寻找的方法:

function Activetab () {
    var tabs = document.getElementsByClassName('tab');

    for (i = 0; i < tabs.length; i++) {
        tabs[i].addEventListener('click', function (e) {
            removeActive();
            e.target.classList.add('active');
         })
    }
};

function removeActive() {
    var tabs = document.getElementsByClassName('tab');
    for (i = 0; i < tabs.length; i++) {
        tabs[i].classList.remove('active')
    }
}
window.onload = Activetab; // Just assign the function
window.onload = removeActive; // Just assign the function

您有两种选择,不要选择IIFE

function Activetab () {
        var tabs = document.getElementsByClassName('tab');
        for (i = 0; i < tabs.length; i++) {
            tabs[i].addEventListener('click', function (e) {
                removeActive();
                e.target.classList.add('active');
            })
        }
    }

或将其保留为IIFE并删除window.onload = Activetab(); IIFE立即被调用,因此无需调用它

IIFE也可以是匿名的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM