0

我是 coffeescript 和 javascript 的新手,我写了一个简单的代码 =>

 1 number = 42
  2 coffee = ->
  3     ans = confirm "Ready?"
  4     "your answer is #{ans}"

我将生成的javascript放入html中,通过单击按钮调用咖啡功能,但它没有显示警报窗口,并且Firebug告诉我“ReferenceError:咖啡未定义”

 1 <head>
  2     <script type=”text/javascript” src=”http://codeorigin.jquery.com/jquery-1.10.2.js"> </script>
  3     <script type="text/javascript" >
  4         // Generated by CoffeeScript 1.6.3
  5         $(document).ready(
  6                 function(){
  7
  8                 var coffee, fk, number;
  9
 10                 number = 42;
 11
 12                 coffee = function() {
 13                 var ans;
 14                 ans = confirm("Ready?");
 15                 return "your answer is " + ans;
 16                 };
 17                 });
 18
 19         </script>
 20     </head>
 21     <body>
 22         <input type=button name="lala" value="hihi" onclick="coffee();">
 23     </body>
4

2 回答 2

1

您将函数定义coffee为另一个函数的局部变量,因此它在全局范围内不可用。

无论如何都不建议将 onclick 事件放在 HTML 中的元素上,因此使用 jQuery 附加事件应该可以解决问题:

number = 42
coffee = ->
    ans = confirm "Ready?"
    "your answer is #{ans}"

$("input[name=lala]").on "click", coffee
于 2013-08-21T10:01:34.250 回答
1

您需要导出脚本中希望对外界可见的部分。

最简单的方法是

window.myCoffee = {}

number = 42

myCoffee.coffee = ->
   ans = confirm "Ready?"
   "your answer is #{ans}"

那是因为脚本被包装在它自己的私有作用域中。

但由于您已经在使用 jQuery,更好的解决方案是将点击处理程序附加到 DOM 元素。

number = 42

$('input').click ->
   ans = confirm "Ready?"
   "your answer is #{ans}"

最后,从 onClick 返回一个字符串似乎没那么有用。也许alert

于 2013-08-21T09:59:37.383 回答