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

时间:2017-08-01 20:44:48

标签: javascript jquery html object event-handling

这是一个简单的例子:



  $(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;
&#13;
&#13;

错误消息显示:&#34;警报器未定义&#34;

我不能在我的项目中使用js .click()函数(或eventlistener),因为没有永久的div。

当然,如果&#34;警报器&#34;函数不在范围函数内,但我不想声明全局变量。

感谢您的帮助!

3 个答案:

答案 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;)})