未捕获的ReferenceError:未定义Activetab

时间:2018-02-22 22:53:06

标签: javascript

我有这个脚本:

(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 funcion无法监听Activetab函数

2 个答案:

答案 0 :(得分:1)

您需要立即调用函数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

答案 1 :(得分:0)

你有两个选择,不要把它变成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也可以是匿名的。