Javascript 如何通过onclick事件访问作用域中的函数?

Javascript 如何通过onclick事件访问作用域中的函数?,javascript,jquery,html,object,event-handling,Javascript,Jquery,Html,Object,Event Handling,这里有一个简单的例子: $(函数(){///范围 功能报警器(编号){ 开关(编号){ 案例1: 警报(“第一”); 打破 案例2: 警报(“第二”); 打破 } } }); #首先{ 宽度:300px; 高度:300px; 背景:红色; } #第二{ 宽度:300px; 高度:300px; 背景:蓝色; } 这里的问题是,“alerter”被定义到通过调用匿名函数创建的临时作用域中 如果您希望它超出其范围,您需要执行以下操作 window.alerter = function alerte

这里有一个简单的例子:

$(函数(){///范围
功能报警器(编号){
开关(编号){
案例1:
警报(“第一”);
打破
案例2:
警报(“第二”);
打破
}
}
});
#首先{
宽度:300px;
高度:300px;
背景:红色;
}
#第二{
宽度:300px;
高度:300px;
背景:蓝色;
}

这里的问题是,“alerter”被定义到通过调用匿名函数创建的临时作用域中

如果您希望它超出其范围,您需要执行以下操作

window.alerter = function alerter...
[编辑]

因为您不想声明“全局”变量,所以需要使用js、cf comment粘贴事件


您可以使用委托事件(又称jQuery的“on”方法)来完成。它不需要永久div就可以工作。

如果不将其声明为全局函数,html将无法调用它。如果你不想,你可以颠倒你的逻辑,做如下的事情

$(函数(){///范围
$(“#first”)。在(“单击”,函数()上){
报警器(1);
});
$(“#秒”)。在(“单击”,函数(){
报警器(2);
});
功能报警器(编号){
开关(编号){
案例1:
警报(“第一”);
打破
案例2:
警报(“第二”);
打破
}
}
});
#首先{
宽度:300px;
高度:300px;
背景:红色;
}
#第二{
宽度:300px;
高度:300px;
背景:蓝色;
}

如果您解释了使用此代码试图实现的目标,可能会有所帮助。使用switch语句是否有特定的原因?您可能想考虑使用jQuery。例如:


$(“#first”).on('click',function(){alert(“first”)})

如果您不想要globals,您将如何在HTML文件中使用它。。。?JS文件中的绑定监听器或其他全局变量都是必需的。“当然,如果“alerter”函数不在作用域函数中,它会起作用,但我不想声明全局变量。”然后需要使用javascript将事件放置在匿名函数中,因为它是唯一可以引用alerter的地方。使用jQuery'on或本机addEventListener之类的东西。告诉OP.@Barmar我知道。。。因此,我对原问题作出评论。我正在通知答复者。可能会提到“在HTML中使用函数的唯一方法是使用全局变量”。正如我所说,在我的项目中不能使用eventlisteners。那么就没有办法保持全局范围干净。@HowardFring,那么你就完蛋了。HTML属性中的Javascript只能访问全局范围。因此,您需要全局变量或使用JS添加侦听器。@HowardFring您可以使用
document.getElementById('first')。onclick=…
?@HowardFring您可以通过将全局变量全部放在一个对象中来最小化全局变量的数量。然后,您只需要使用
objectName.alerter(1)
我无法确定,因为javascript将呈现与数据库中相同数量的HTML元素。