这是一个简单的例子:
$(function(){ ///scope
function alerter(number){
switch(number){
case 1:
alert("first");
break;
case 2:
alert("second");
break;
}
}
});

#first{
width: 300px;
height: 300px;
background: red;
}
#second{
width: 300px;
height: 300px;
background: blue;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="first" onclick="alerter(1)">
</div>
<div id="second" onclick="alerter(2)">
</div>
&#13;
错误消息显示:&#34;警报器未定义&#34;
我不能在我的项目中使用js .click()函数(或eventlistener),因为没有永久的div。
当然,如果&#34;警报器&#34;函数不在范围函数内,但我不想声明全局变量。
感谢您的帮助!
答案 0 :(得分:0)
这里的问题是“警报器”被定义到通过调用匿名函数创建的临时范围。
如果您希望它超出其范围,您需要执行类似
的操作window.alerter = function alerter...
[编辑]
由于您不想声明“全局”变量,因此您需要使用js来粘贴事件,参见注释。
你可以使用委托事件jQuery的“on”方法来完成它。它不需要永久的div来工作。
答案 1 :(得分:0)
如果您不将其声明为全局函数,则html将无法调用它。如果你不能改变你的逻辑并做一些类似的事情。
$(function() { ///scope
$("#first").on("click", function() {
alerter(1);
});
$("#second").on("click", function() {
alerter(2);
});
function alerter(number) {
switch (number) {
case 1:
alert("first");
break;
case 2:
alert("second");
break;
}
}
});
#first {
width: 300px;
height: 300px;
background: red;
}
#second {
width: 300px;
height: 300px;
background: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="first">
</div>
<div id="second">
</div>
通过这种方式,您可以保持全局范围的清晰,但您将拥有相同的功能。
答案 2 :(得分:0)
如果您通过此代码解释了您要实现的目标,可能会有所帮助。是否有使用switch语句的特定原因?您可能想要考虑使用jQuery .on事件,如@dader指出的那样。一个例子是:
$(&#34;#first&#34;)。on(&#39; click&#39;,function(){alert(&#34; First&#34;)})