CoffeeScript无法在onclick上工作

时间:2013-12-26 22:54:13

标签: javascript coffeescript

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>

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

  

未捕获的ReferenceError:未定义部门

那我该怎么办?

3 个答案:

答案 0 :(得分:7)

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

单击

<button onclick = "department()" >add department</button>将在全局范围内查找函数department(),但您没有。{/ p>

当您将处理程序编写为内联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);

答案 1 :(得分:1)

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

在编译时只需添加 --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..."

答案 2 :(得分:0)

window.department = ->
    console.log 1
在任何coffeescript函数之前

window将使其成为全局

@window.department = ->
    console.log 1

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