【问题标题】:CoffeeScript doesn't work onclickCoffeeScript 在点击时不起作用
【发布时间】:2014-01-14 13:14:15
【问题描述】:

CoffeScript 代码:

 department = ->
   console.log 1

这编译成js代码:

// Generated by CoffeeScript 1.6.3
(function() {
  var department;

  department = function() {
    return console.log(1);
  };

}).call(this);

我有一个按钮:

<button onclick = "department()" >add department</button>

但是当我点击它时,它会抛出一个错误:

未捕获的引用错误:部门未定义

那我该怎么办?

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    这是因为您的函数 department 不在全局范围内,而是在您编写为 IIFE 的匿名函数的闭包中。

    &lt;button onclick = "department()" &gt;add department&lt;/button&gt; 点击时会在全局范围内寻找函数department(),而你没有它。

    当您将处理程序编写为内联 html 属性时会发生这种情况。您可以使用 javascript 绑定事件,将函数作为闭包中的引用。

    你可以这样做:

    例子:-

     <button id="dept"  >add department</button>
    

    (function() {
      var department;
    
      department = function() {
        return console.log(1);
      };
    
      window.onload = function(){
          document.getElementById('dept').onclick = department;
      }
    
    }).call(this);
    

    【讨论】:

    • 这回答了为什么,但没有回答我应该如何更改我的 cofeescript 代码以使其工作
    • @user2950593 我不知道咖啡脚本的语法,但你可以查看我提供的一个。
    • 但是应该有办法通过 Html 在咖啡脚本中添加它。我明白了。我只是觉得在html中不能做有点奇怪。
    • 您可以尝试将其放在闭包之外,使其处于全局范围内.. 或 (function() { window.department = function() { return console.log(1); }; }).call(this); 但是您应该摆脱绑定事件内联 html,而应该通过 js 绑定它们,使用addEventListenerattachEvent(对于较旧的 IE)等。
    • @user2950593 为什么不接受我的回答?我说You could try placing it out of the closure so that it is in global scope 显然意味着将其置于全局范围内。你可以使用js2coffee.org 轻松做到这一点,但我提供了一个更有效和更好的替代选择..
    【解决方案2】:
    window.department = ->
        console.log 1
    

    window 在任何咖啡脚本函数将其变为全局之前

    还有

    @window.department = ->
        console.log 1
    

    @ 符号指的是this,在这种情况下指的是document

    【讨论】:

      【解决方案3】:

      旧帖子,但如果有人像我一样偶然发现这个......

      编译时只需添加--bare 作为参数即可不将代码包装在匿名函数中。

      那我们不用直接调用CoffeeScript,而是直接使用编译好的js文件,就像你自己用JS写的一样。

      <button onclick="getCoffee()">From CoffeeScript</button>
      <script type="text/javascript" src="Resources/js/getcoffee.js"></script>
      

      通过这种方式,您的 CoffeeScript 中不需要任何特殊内容。

      getCoffee = () ->
        alert "Delicious Coffee..."
      

      【讨论】:

      • 很老的帖子不知道你的解决方案是否有效
      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多