我试图设置一个嵌套函数,我可以在整个脚本中调用它,但我一直得到"错误未定义不是函数"。也许有人可以帮我解决如何正确地做到这一点。
首先我设置全局变量:
var trigger = document.getElementById('trigger');
var subject = document.getElementById('subject');
然后我创建一个显示/隐藏功能:
var toggleVis = function() {
function showSomething() {
trigger.classList.add("active");
subject.classList.add("active");
}
function hideSomething() {
trigger.classList.remove("active");;
subject.classList.remove("active");
}
}
然后我设置我的事件监听器:
trigger.addEventListener('click', function() {
if ( subject.classList.contains("active") ) {
toggleVis.hideSomething();
}
else {
togglePicker.showPicker();
}
});
我尝试这样做的原因是,页面上有一些需要访问显示/隐藏功能的主题的其他触发器。
答案 0 :(得分:1)
您无法访问函数内部的函数,它们超出范围,您可以将它们作为属性附加到包装函数,但看起来您只需要一个对象
var toggleVis = {
showSomething: function() {
trigger.classList.add("active");
subject.classList.add("active");
},
hideSomething: function() {
trigger.classList.remove("active");;
subject.classList.remove("active");
}
}
答案 1 :(得分:1)
您的togleVis
变量是一个函数,而不是object
,因此您无法执行toggleVis.hideSomething()
。尝试将代码更新为:
var toggleVis = (function() {
return {
showSomething : function () {
trigger.classList.add("active");
subject.classList.add("active");
},
hideSomething : function () {
trigger.classList.remove("active");;
subject.classList.remove("active");
}
};
}());
使用此toggleVis
现在是一个包含两个属性showSomething
和hideSomething
函数的对象。